昨天被室友拖著去吃雞去了,所以沒有學習,該反省。只有今天多學習一點,將昨天的補回來。 今天學習了python的多繼承。 覺得多繼承還是有點難,今天在學習多繼承的實收,一不小心將一個父類的構造函數的名稱寫錯了,然後就出現了bug,找了好久,才發現是上面寫錯了,結果編輯器報錯的地方與我真正出錯的地方差了 ...
昨天被室友拖著去吃雞去了,所以沒有學習,該反省。只有今天多學習一點,將昨天的補回來。
今天學習了python的多繼承。
覺得多繼承還是有點難,今天在學習多繼承的實收,一不小心將一個父類的構造函數的名稱寫錯了,然後就出現了bug,找了好久,才發現是上面寫錯了,結果編輯器報錯的地方與我真正出錯的地方差了好遠,所以大家寫代碼要仔細一點,找bug真的是惱火。
好了,言歸正傳,開始正文。
class People(object): # 這是第一個父類
name=""
age=0
__weight=0 # 私有屬性
def __init__(self,name,age,weight):
self.name=name
self.age=age
self.__weight=weight
def speak(self):
print(self.name,self.age,self.__weight)
# 在繼承類的時候 類名後面的括弧里寫的就是你需要繼承的類,可以看出來這是一個單繼承
class Student(People): #這裡定義了一個子類,而且繼承了上面的people類
grade=""
def __init__(self,name,age,weight,grade):
People.__init__(self,name,age,weight)
self.grade=grade
def print_sutdent(self):
print(self.grade)
# 在這兒再創建一個類
class Speaker(object):
topic=""
name=""
def __init__(self,name,topic):
self.name=name
self.topic=topic
def print_speak(self):
print(self.name,self.topic)
# 這兒就是今天的主角了,類的多繼承,可以看到,類名之後的括弧里,就是寫的你需要繼承的父類的名稱。
# 註意,父類的書序很重要,比如說你需要調用一個子類沒有而父類卻有的方法,那麼python解釋器將會在父類之中從左到右尋找你調用的方法。
class Sample(Student,Speaker):
a=""
# 這裡很重要,這裡是繼承父類的構造函數的寫法
def __init__(self,name,age,weight,grade,topic,a):
Student.__init__(self,name,age,weight,grade)
Speaker.__init__(self,name,topic)
self.a=a
# 這裡叫做方法重寫:意思就是如果父類中存在這個方法,但是功能不能滿足子類的需求,那麼你就可以在子類中重新定義一個函數名稱和父類的相同,
#然後這個實例在調用該方法的時候,就會調用子類中的你重寫的方法。
def print_speak(self):
print(self.name,self.age,self.grade,self.topic,self.a)
# 使用子類生成實例
test=Sample("tim",25,80,99,"python",10)
# 調用子類中重寫的方法
test.print_speak()