Python物件導向(四)

2021-08-28 07:46:09 字數 2572 閱讀 5357

如果在子類中需要父類的構造方法就需要顯示的呼叫父類的構造方法,或者不重寫父類的構造方法。詳細說明可檢視:python 子類繼承父類建構函式說明。

在呼叫基類的方法時,需要加上基類的類名字首,且需要帶上 self 引數變數。區別在於類中呼叫普通函式時並不需要帶上 self 引數

python 總是首先查詢對應型別的方法,如果它不能在派生類中找到對應的方法,它才開始到基類中逐個查詢。(先在本類中查詢呼叫的方法,找不到才去基類中找)。

如果在繼承元組中列了乙個以上的類,那麼它就被稱作"多重繼承" 。

語法:

派生類的宣告,與他們的父類類似,繼承的基類列表跟在類名之後,如下所示:

class subclassname (parentclass1[, parentclass2, ...]):

...

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

class animal(object):

def run(self):

print('animal is running...')

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

```python

class dog(animal):

pass

class cat(animal):

pass

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

繼承有什麼好處?最大的好處是子類獲得了父類的全部功能。由於animial實現了run()方法,因此,dog和cat作為它的子類,什麼事也沒乾,就自動擁有了run()方法:

```python

dog = dog()

dog.run()

cat = cat()

cat.run()

執行結果如下:

animal is running...

animal is running...

當然,也可以對子類增加一些方法,比如dog類:

class dog(animal):

def run(self):

print('dog is running...')

def eat(self):

print('eating meat...')

繼承的第二個好處需要我們對**做一點改進。你看到了,無論是dog還是cat,它們run()的時候,顯示的都是animal is running…,符合邏輯的做法是分別顯示dog is running…和cat is running…,因此,對dog和cat類改進如下:

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...

例項

class parent:        # 定義父類

parentattr = 100

def __init__(self):

print "呼叫父類建構函式"

def parentmethod(self):

print '呼叫父類方法'

def setattr(self, attr):

parent.parentattr = attr

def getattr(self):

print "父類屬性 :", parent.parentattr

class child(parent): # 定義子類

def __init__(self):

print "呼叫子類構造方法"

def childmethod(self):

print '呼叫子類方法'

c = child() # 例項化子類

c.childmethod() # 呼叫子類的方法

c.parentmethod() # 呼叫父類方法

c.setattr(200) # 再次呼叫父類的方法 - 設定屬性值

c.getattr() # 再次呼叫父類的方法 - 獲取屬性值

以上**執行結果如下:

呼叫子類構造方法

呼叫子類方法

呼叫父類方法

父類屬性 : 200

Python面向啊物件(四)

new 方法 new 方法是由object基類提供的內建方法,主要用來建立單例類 物件建立時 new 方法首先為物件分配乙個記憶體空間 如果類中沒有顯式定義 new 方法,則類中的 new 方法繼承自object基類 然後 new 方法返回物件的引用,init 方法接收到返回的物件引用後才會開始初始...

Python物件導向程式設計(四)

第40個 基本異常處理 1 while true 2 num1 input num1 3 num2 input num2 4try try塊裡放正常的 5 num1 int num1 6 num2 int num2 7 num3 num1 num2 8print num3 9 except exce...

Python物件導向學習筆記(四)

單例設計模式 站物件 印表機物件 python的直譯器獲得物件的引用後,將引用作為第乙個引數,傳遞給 init 方法 重寫 new 方法 的 非常固定!只執行一次初始化工作 定義乙個類屬性init flag標記是否執行過初始化動作,初始值為false在 init 方法中,判斷init flag,如果...