物件導向程式設計 super高階(十)

2022-03-14 07:22:21 字數 2011 閱讀 3308

一、入門使用

在python中,使用super最常見的讓子類繼承父類。在這種情況下,當前類和物件可以作為super函式的引數使用,呼叫函式返回的任何方法都是呼叫超類的方法,而不是當前類的方法。

class

information(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來實現:

class

information(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")

列印的結果:

abc

d

在多繼承中,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中屬性和方法訪問許可權的問題,雖然我...