一、入門使用
在python中,使用super最常見的讓子類繼承父類。在這種情況下,當前類和物件可以作為super函式的引數使用,呼叫函式返回的任何方法都是呼叫超類的方法,而不是當前類的方法。
classinformation(object):
def__init__
(self,name,age):
self.name =name
self.age =age
class
job_information(information):
def__init__
(self,name,age,job_time):
#information.__init__(self,name,age)super(job_information,self).__init__(name,age)self.job_time = job_time
在類的繼承中,如果重新定義某個方法,該方法會覆蓋父類的同名方法,但有時,我們希望能同時實現父類的功能,這時,我們就需要呼叫父類的方法了,可以使用super來實現:
classinformation(object):
def__init__
(self,name,age):
self.name =name
self.age =age
defprint_flag(self):
print("
我是老大")
class
job_information(information):
def__init__
(self,name,age,job_time):
#information.__init__(self,name,age)
super(job_information,self).__init__
(name,age)
self.job_time =job_time
defprint_flag(self):super(job_information,self).print_flag() #super以自己作為引數,呼叫父類的方法print("
我是老二")
kebi = job_information("
科比",25,3)
kebi.print_flag()
列印結果:
我是老大我是老二
在上面,我們重新定義了print_flag方法,一般情況下會列印自己定義的,為了能夠實現父類的功能,我們又使用super呼叫了父類的方法。
二、深入super()
來看乙個稍微複雜一點的例子:
class d(object):def __init__(self):
print("d")
class c(d):
def __init__(self):
print("c")
super(c,self).__init__()
class b(d):
def __init__(self):
print("b")
super(b,self).__init__()
class a(b,c):
def __init__(self):
print("a")
super(a, self).__init__()
# print("b") #將其替換掉,就是這樣的
# print("c") #
# print("d")
列印的結果:
abcd
在多繼承中,super不只是尋找當前的父類,而是依據mro順序,根據廣度優先查詢下乙個類。
物件導向 this和super
目錄 this的原理 super的兩個用法 關於this和super的總結 this跟super呼叫 哪個物件呼叫了this所在函式 包含this的函式,this一般都在方法內部呼叫 那麼this就代表哪個物件 這時候在壓棧的函式中this會把物件引用所對用的位址值拿過來,跟物件引用名指向堆記憶體中...
物件導向的高階程式設計
在定義class的時候,定義乙個特殊的 solts 變數,來限制class例項能新增的屬性 class student object solts name age 用tuple定義允許繫結的屬性名稱 s student 建立新的例項 s.name michael 繫結屬性 name s.age 25...
Python物件導向程式設計高階
在前面的章節我們已經了解了物件導向的入門知識,知道了如何定義類,如何建立物件以及如何給物件發訊息。為了能夠更好的使用物件導向程式設計思想進行程式開發,我們還需要對python中的物件導向程式設計進行更為深入的了解。property裝飾器 之前我們討論過python中屬性和方法訪問許可權的問題,雖然我...