深入理解super()函式在類的繼承中,如果重定義某個方法,該方法會覆蓋父類的同名方法,但有時,我們希望能同時實現父類的功能,這時,我們就需要呼叫父類的方法了,可通過使用super()函式來實現。
super
(type[,
object-or
-type
])
引數:
classa:
def__init__
(self)
:print
("a"
)class
b(a)
:def
__init__
(self)
:print
("b"
)super()
.__init__(
)# 呼叫父類
if __name__ ==
'__main__'
: b = b(
)
輸出結果:
b
a # super呼叫父類輸出 a
class
animal
:# 建立動物類
"""動物類"""
def__init__
(self, name)
:# 初始化方法
self.name = name
defeat(self)
:# 定義吃食物方法
print
('%s正在吃食物'
% self.name)
defplay
(self)
:# 定義玩耍方法
print
('%s正在玩'
% self.name)
defsleep
(self)
:# 定義休息方法
print
('%s正在休息'
% self.name)
class
dog(animal)
:"""狗類"""
def__init__
(self, name)
:super()
.__init__(name)
# 定義基類的初始化方法
print
('這是乙隻%s'
% self.name)
defeat
(self)
:# 定義狗吃食物的方法
print
('%s正在吃**'
% self.name)
defbark
(self)
:# 定義狗叫的方法
print
('%s會汪汪叫'
% self.name)
dog = dog(
'哈士奇'
)# 建立動物類的例項
dog.eat(
)# 呼叫吃食物的方法
dog.play(
)# 呼叫玩耍的方法
dog.bark(
)# 呼叫狗叫的方法
輸出結果:
這是乙隻哈士奇
哈士奇正在吃**
哈士奇正在玩
哈士奇會汪汪叫
根據執行結果看出第21行**因為呼叫了super().init()方法,並傳遞了乙個name引數。在animal基類的__init__方法中,將name賦值給self.name。所以第22行**會輸出「這是乙隻哈士奇」。
class
food
:"""實物類"""
def__init__
(self, name)
:print
('%s是食物'
% name)
class
vegetables
(food)
:"""蔬菜類"""
def__init__
(self, vname)
:print
('%s是蔬菜'
% vname)
super()
.__init__(vname)
class
fruit
(food)
:"""水果類"""
def__init__
(self, fname)
:print
('%s是水果'
% fname)
super()
.__init__(fname)
class
tomato
(fruit, vegetables)
:"""西紅柿類"""
def__init__
(self)
:print
('西紅柿即是蔬菜又是水果'
)super()
.__init__(
'西紅柿'
)print
(tomato.__mro__)
# mro 列表順序
tomato = tomato(
)# 例項化西紅柿類
輸出結果:
(
>, >, >, >, >
)西紅柿即是蔬菜又是水果
西紅柿是水果
西紅柿是蔬菜
西紅柿是食物
根據執行結果可知: python深入 Python的深入理解
處理檔案和目錄 python 3 帶有乙個模組叫做 os,代表 作業系統 operating system os 模組 包含非常多的函式用於獲取 和修改 本地目錄 檔案程序 環境變數等的資訊。python 盡最大的努力在所有支援的作業系統上提供乙個統一的api,這樣你就可以在保證程式能夠在任何的計算...
深入理解Python類
c 中,類有兩個關鍵的內建函式,建構函式和析構函式。在python中,其實也有類似的函式,他們就是 def init self pass def del self pass def enter self pass def exit self pass在物件建立時執行操作。在物件析構時執行操作。注意 ...
深入理解Python切片
python序列的切片很基礎同時也很重要,最近看到乙個 1 的表達,不明所以,查了一些資料並實際操作,對python切片有了更深刻的認識,以下結合例子詳細說明。先看下切片的基本語法,一般認為切片語法是 n m 是個半閉合區間,等效於數學上 n,m 取值範圍,取n不取m,n和m都可以省略,n看下面的例...