1. 程式人生 > >Python類常用的魔術方法

Python類常用的魔術方法

類的常用魔術方法:無需人為呼叫,基本是在特定的時刻自動觸發,方法名被前後兩個下劃線包裹

__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__:進行大於判斷的時候觸發的函式。

以上就是常用的一些魔術方法了。