關於魔法方法的一點總結

2021-08-25 22:58:45 字數 1663 閱讀 9905

如果按以下方式重寫魔法方法 _init_,結果會怎樣?

class

myclass:

def__init__

(self):

return

"i love you"

會報錯,因為init特殊方法不應當返回除了 none 以外的任何物件。

假設已經有鳥類的定義,現在我要定義企鵝類繼承於鳥類,但我們都知道企鵝是不會飛的,我們應該如何遮蔽父類(鳥類)中飛的方法?

用子類覆蓋掉父類的方法就行了

class

bird:

deffly

(self):

print("fly away")

class

penguin

(bird):

deffly

(self):

pass

寫乙個 fileobject 類,給檔案物件進行包裝,從而確認在刪除物件時檔案能自動關閉

class

fileobject:

def__init__

(self, filename):

self.new_file = open(filename, 'r')

def__del__

(self):

self.new_file.close()

del self.new_file

對檔案進行包裝從而確定在刪除時檔案可以自動關閉。

按照以下要求,定義乙個類實現攝氏度到華氏度的轉換**換公式:華氏度 = 攝氏度*1.8+32)

希望可以盡可能簡化的形式輸出,有如下輸出格式

>>> print(c2f(32))

89.6

為了盡量簡練地實現功能,我們採取了「偷龍轉鳳」的小技巧。在類進行初始化之前,通過「掉包」 tem 引數,讓例項物件直接返回計算後的結果。

class

c2f(float):

def__new__

(cls, tem=0.0):

return float.__new__(cls, tem*1.8+32)

定義乙個類繼承於 int 型別,並實現乙個特殊功能:當傳入的引數是字串的時候,返回該字串中所有字元的 ascii 碼的和(使用 ord() 獲得乙個字元的 ascii 碼值)。

class

nint

(int):

def__new__

(cls, arg = 0):

if isinstance(arg, str):

total = 0

for each in arg:

total += ord(each)

arg = total

return int.__new__(cls, arg)

結果:

>>> print(nint('a'))

65

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

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

總結Python常用的魔法方法

運算子 對應的魔法方法 中文注釋 add self,other 加法 sub self,other 減法 mul self,other 乘法 truediv self,other 真除法 floordiv self,other 整數除法 mod self,other 取餘除法 divmod a,b ...

python的魔法 Python 魔法方法

先給個例子 class frenchdeck ranks str n for n in range 2,11 list jqka suits spades diamonds clubs hearts split def init self self.cards card rank,suit for ...