Python-Class(類)生命週期和類屬性方法(魔法方法)

內置屬性和方法

方法名 類型- 做用
__init__ 方法 類實例化時自動調用這個函數
__del__ 方法 對象被內存中銷燬前,會被自動調用
__str__ 方法 類的實例打印時調用這個函數(返回)用戶看到的
__repr__ 方法 和上面的str函數同樣,只是這個時返回開發者看到的
__ getattr __ 方法 當調用不存在的屬性時訪問這個方法
__call__ 方法 若是類實現了這個方法,至關於把這個類型的對象看成函數來使用,至關於 重載了括號運算符

具體參考Python3標準庫html

生命週期

  • 一個對象從調用類名()開始建立,生命週期開始
  • 一個對象 __del__ 方法一旦被調用,生命週期結束
  • 在對象生命週期內能夠訪問,對象屬性,或者讓對象調用方法

例如:python

class Cat:
    def __init__(self, name):
        self.name = name
        print('他來了 他來了')

    def __del__(self):
        print('他走了 他走了')

# Tom 是一個全局變量
tom = Cat('Tom')
print(tom.name)
print('-' * 50)
複製代碼

執行以下bash

他來了 他來了
Tom
--------------------------------------------------
他走了 他走了
複製代碼

如今 咱們調用 del 刪除 tom函數

-- omit --

# Tom 是一個全局變量
tom = Cat('Tom')
print(tom.name)
del tom
print('-' * 50)
複製代碼
他來了 他來了
Tom
他走了 他走了
--------------------------------------------------
複製代碼

Class魔法方法

上面的表格以及描述的差很少了,貼一段代碼來例舉spa

class Cat:
    # 類實例化時自動調用這個函數
    def __init__(self, name):
        self.name = name
        print('%s他來了 他來了' % self.name)

    # 對象被內存中銷燬前,會被自動調用
    def __del__(self):
        print('他走了 他走了')

    # 類的實例打印時調用這個函數(返回)用戶看到的
    def __str__(self):
        return '我是Cat的類'

    # 和上面的str函數同樣,只是這個時返回開發者看到的
    def __repr__(self):
        return '__repr__'

    # 當調用不存在的屬性時訪問這個方法
    def __getattr__(self, item):
        item = 'A'
        print('屬性不存在,默認爲 %s' % item)

    # 若是類實現了這個方法,至關於把這個類型的對象看成函數來使用,至關於 重載了括號運算符
    def __call__(self, *args, **kwargs):
        print('我是 %s 經過__call__轉函數實例化的' % args)


# Tom 是一個全局變量
tom = Cat('Tom')
print(tom.name)
# del tom
print('-' * 50)
print(tom)
tom.sex
print('*' * 50)
tom('Tim')

複製代碼

懶的同窗 看下面 執行結果code

Tom他來了 他來了
Tom
--------------------------------------------------
我是Cat的類
屬性不存在,默認爲 A
**************************************************
我是 Tim 經過__call__轉函數實例化的
他走了 他走了
複製代碼

__call__ 若是沒有定義的話 就 tom('Tim') 就用實例直接調用類的話會保持喲~htm

相關文章
相關標籤/搜索