Python 第十四天

2021-09-29 07:04:29 字數 3814 閱讀 4618

物件導向程式設計(object-oriented programming,簡稱 oop),是一種封裝**的方法。**封裝,其實就是隱藏實現功能的具體**,僅留給使用者使用的介面,就好像使用計算機,使用者只需要使用鍵盤、滑鼠就可以實現一些功能,而根本不需要知道其內部是如何工作的。

python 中,建立乙個類使用class關鍵字實現,其基本語法格式如下:

class 類名:

零個到多個類屬性...

零個到多個類方法...

class

person

:'''這是乙個學習python定義的乙個person類'''

# 下面定義了乙個類屬性

hair =

'black'

# 下面定義了乙個say方法

defsay

(self, content)

:print

(content)

注意:

類中屬性和方法所在的前後順序沒有任何影響,且各成員之間可以相互呼叫。

類名只要是乙個合法的識別符號即可,但這僅僅滿足的是 python 的語法要求:如果從程式的可讀性方面來看,python 的類名必須是由乙個或多個有意義的單詞連綴而成的,每個單詞首字母大寫,其他字母全部小寫,單詞與單詞之間不要使用任何分隔符,

如果不為類定義任何屬性和方法,那麼這個類就相當於乙個空類,如果空類不需要其他可執行語句,則可使用 pass 語句作為佔位符。

例如:

class

empty

:pass

在建立類時,我們可以手動新增乙個init() 方法,該方法是乙個特殊的類例項方法,稱為構造方法(或建構函式)。

構造方法用於建立物件時使用,每當建立乙個類的例項物件時,python 直譯器都會自動呼叫它。python 類 中,手動新增構造方法的語法格式如下:

def

__init__

(self,..

.):

**塊

注意,此方法的方法名中,開頭和結尾各有2 個下劃線,且中間不能有空格。

class

person

:'''這是乙個學習python定義的乙個person類'''

def__init__

(self)

:print

("呼叫構造方法"

)

注意如果開發者沒有為該類定義任何構造方法,那麼 python 會自動為該類建立乙個只包含 self 引數的預設的構造方法。

繼承:在oop程式設計中,當我們定義乙個class的時候,可以從某個現有的class繼承,新的class稱為子類(subclass),而被繼承的class稱為基類、父類或超類(base class、super class)。

比如,我們已經編寫了乙個名為animal的class,有乙個run()方法可以直接列印:

class

animal

(object):

defrun

(self)

:print

('animal is running...'

)

當我們需要編寫dog和cat類時,就可以直接從animal類繼承:

class

dog(animal)

:pass

class

cat(animal)

:pass

對於dog來說,animal就是它的父類,對於animal來說,dog就是它的子類。cat和dog類似。

dog = dog(

)dog.run(

)cat = cat(

)cat.run(

)

執行後;

animal is running...

animal is running.

..

改進後:

class

dog(animal)

:def

run(self)

:print

('dog is running...'

)class

cat(animal)

:def

run(self)

:print

('cat is running...'

)

再執行:

dog is running...

cat is running.

..

可以看出,繼承機制非常方便;

獲取物件資訊:

1.使用type():

>>

>

type

(123

)<

class

'int'

>

>>

>

type

('str'

)<

class

'str'

>

如果乙個變數指向函式或者類,也可以用type:

>>

>

type

(abs

)<

class

'builtin_function_or_method'

>

2.使用isinstance()

對於class的繼承關係來說,使用type()就很不方便。我們要判斷class的型別,可以使用isinstance()函式。

如果繼承關係是:

object -> animal -> dog -> husky

先建立3種型別的物件:

>>

> a = animal(

)>>

> d = dog(

)>>

> h = husky(

)

然後,判斷:

>>

>

isinstance

(h, husky)

true

h變數指向的就是husky物件。

>>

>

isinstance

(h, dog)

true

h雖然自身是husky型別,但由於husky是從dog繼承下來的,所以,h也還是dog型別。

所以!isinstance()判斷的是乙個物件是否是該型別本身,或者位於該型別的父繼承鏈上

使用dir()

如果要獲得乙個物件的所有屬性和方法,可以使用dir()函式,

>>

>

dir(

'abc')[

'__add__'

,'__class__',.

..,'__subclasshook__'

,'capitalize'

,'casefold',.

..,'zfill'

]

訪問限制

如果要讓內部屬性不被外部訪問,可以把屬性的名稱前加上兩個下劃線__,在python中,例項的變數名如果以__開頭,就變成了乙個私有變數(private),只有內部可以訪問,外部不能訪問。

python學習 第十四天

在下這廂有禮了 python正規表示式 python通過re模組提供對正規表示式的支援。使用re的一般步驟是先將正規表示式的字串形式編譯為pattern例項,然後使用pattern例項處理文字並獲得匹配結果 乙個match例項 最後使match例項獲得資訊,進行其他的操作。encoding utf ...

學習python 第十四天

python 傳送電子郵件 訪問 http協議,傳送郵件要使用smtp。smtp mail transfer protocol 即簡單郵件傳輸協議,它是一組用於由源位址到目的位址傳送郵件的規則,由它來控制信件的中轉方式。python的smtplib提供了一種很方便的途徑傳送電子郵件。它對smtp協議...

PYTHON小白 第十四天

python小白 第十四天 1 方法 方法是類或物件的行為特徵的抽象,但python方法其實也是函式,其定義方式 呼叫方式和函式都非常相似,因此python方法並不僅僅是單純的方法,它與函式也有莫大的關係。1.1 類也能呼叫例項方法 python的類在很大程度上是乙個命名空間 當程式在類體中定義變數...