Python 基礎之魔法方法

2021-08-10 21:03:09 字數 2498 閱讀 4271

構造方法類似於初始化方法,但是構造方法與其他普通的方法的不同之處在於,當乙個物件被建立之後,會立即呼叫構造方法。

class

servant

(object):

definit

(self):

self.servant ="saber"

fb=servant()

fb.init()

print(fb.servant)

class

servant

(object):

def__init__

(self):

self.servant = "saber"

fb = servant()

print(fb.servant)

以上兩段**的功能是完全一樣的。

每個類都可能有乙個或者多個父類,子類可以從父類中繼承行為方式。因此如果乙個方法在子類a的乙個例項中被呼叫,單是在子類中找不到這個方法,那麼就會到他的父類裡面去找這個方法。

class

a(object):

defpp

(self):

print("hello world!")

class

a(a):

pass

b = a()

b = a()

b.pp()

b.pp()

在有些時候我們需要重寫父類的方法,那麼對於一般方法和構造方法來說要如何來重寫呢?

一般方法只需要在子類中重寫或者新增就好了。

class

a(object):

defsay

(self):

print("hello world!")

class

a(a):

defsay

(self):

print("ni hao shi jie !")

b = a()

b = a()

b.say()

b.say()

構造方法用上述方法來寫的話,就會遇到問題。如下:

class

bird

(object):

def__init__

(self):

self.hungry = true

defeat

(self):

if self.hungry:

print("eatting")

self.hungry = false

else :

print("no,thanks!")

class

songbird

(bird):

def__init__

(self):

self.sound = "squawk"

defsing

(self):

print(self.sound)

b = bird()

b.eat()

b.eat()

sb = songbird()

sb.sing()

sb.eat() #加上這一句就會產生異常。

產生異常的原因是在songbird中,構造方法被重寫,但是新的構造方法中沒有任何關於初始化hungry特性的**。為了達到預期的效果,songbird的構造方法必須要呼叫其超類birld的構造方法來確保進行基本的初始化。

解決方法有:

1.呼叫父類方法的未繫結版本。

2.使用super函式

呼叫父類方法的未繫結版本(不常用)

其實很簡單

class

songbird

(bird):

def__init__

(self):

bird.__init__(self)

self.sound = "squawk"

defsing

(self):

print(self.sound)

在songbird類中新增一行**bird.init(self)就可以了。

在呼叫乙個例項的方法的時候,該方法的self引數會自動繫結到例項上(稱之為繫結方法)。但是如果直接呼叫類的方法(比如bird.init),那麼就沒有例項會被繫結。這樣就可以自由的提供需要的self引數。這樣的方法稱為未繫結方法。

使用super函式(經常使用)

class

songbird

(bird):

def__init__

(self):

super(songbird,self).__init__()

self.sound = "squawk"

defsing

(self):

print(self.sound)

Python基礎11 魔法方法

定義 魔術方法,指python中所有以 雙下劃線 作為名字開頭和結尾的方法。它們也被稱為 dunders 我們最常用到的應該就是 init 魔術方法簡介 方法描述 del 析構函式,釋放物件時使用 repr 列印轉換 setitem 按照索引賦值 getitem 按照索引取值 len 獲取長度 cm...

Python魔法方法 基本的魔法方法

new cls 1.new 是在乙個物件例項化時候所呼叫的第乙個方法 2.他的第乙個引數是這個類,其他的引數是用來直接傳遞給 init 方法 3.new 決定是否使用該 init 方法,因為.new 可以直接呼叫其他類的構造方法,或者返回別的例項物件來作為本類的例項,如果 new 沒有返回例項物件,...

python 魔法方法

魔法方法具有一定的特徵 new cls class capstr str def new cls,string 修改新類裡的new方法,需傳入乙個引數 string string.upper return str.new cls,string 用父類裡的new方法進行返回,直接飯後構造後的物件def...