物件導向程式設計(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的類在很大程度上是乙個命名空間 當程式在類體中定義變數...