Python類常用的魔術方法
阿新 • • 發佈:2018-12-09
類的常用魔術方法:無需人為呼叫,基本是在特定的時刻自動觸發,方法名被前後兩個下劃線包裹
__init__:建構函式。
__new__:物件例項化方法,其實這才是類裡面第一個被呼叫的方法,在建構函式之前呼叫,之後才是__init__,只是這個比較特殊,一般不使用。
__call__:物件當函式的時候觸發。
class A(): def __init__(self,name = 0): print("哈哈,我是建構函式") def __call__(self): print("我是__call__函式") a = A() a() #物件當函式使用,如果沒有__call__函式會報錯
__str__:當物件被當做字串使用過的時候呼叫。
class A():
def __init__(self,name = 0):
print("哈哈,我是建構函式")
def __str__(self):
return "我只是一個例子"
a = A()
print(a) #把物件當字串使用
__repr__:返回字串,跟__str__函式差不多。
以上都是屬於操作類的
屬性操作相關:
__getattr__:訪問不存在屬性的時候觸發。
__setattr__:對成員屬性進行設定的時候觸發,有三個引數--
1,self用來獲取當前物件
2,被設定的屬性名稱,以字串形式出現
3,需要對屬性名稱設定的值
作用:進行屬性設定的時候進行驗證或者修改。注意:在該方法中不能對屬性直接進行賦值操作,否則會陷入死迴圈
A():
def __init__(self):
pass
def __setattr__(self, name, value):
print("設定屬性:{0}".format(name))
self.name = value #這句語句會導致死迴圈
a = A()
a.age = 18
所以為了避免死迴圈,規定統一呼叫父類魔法函式:
class A():
def __init__(self):
pass
def __setattr__(self, name, value):
print("設定屬性:{0}".format(name))
super().__setattr__(name,value) #super函式呼叫父類,避免死迴圈
a = A()
a.age = 18
運算分類相關魔術方法:
__gt__:進行大於判斷的時候觸發的函式。
以上就是常用的一些魔術方法了。