python 內建屬性

在python中建立一個類,它不只有咱們自定義的屬性和方法,還有與生俱來的一些屬性和方法,咱們叫它內建屬性。python

下面是類經常使用內建屬性列表。ruby

 

經常使用專有屬性 說明 觸發方式
__init__ 構造初始化函數 建立實例後,賦值時使用,在__new__
__new__ 生成實例所需屬性 建立實例時
__class__ 實例所在的類 實例.__class__
__str__ 實例字符串表示,可讀性 print(類實例),如沒實現,使用repr結果
__repr__ 實例字符串表示,準確性 類實例 回車 或者 print(repr(類實例))
__del__ 析構 del刪除實例
__dict__ 實例自定義屬性 vars(實例.__dict__)
__doc__ 類文檔,子類不繼承 help(類或實例)
__getattribute__ 屬性訪問攔截器 訪問實例屬性時
__bases__ 類的全部父類構成元素 類名.__bases__

 

__init__:負責一個類實例化中的初始化操做app

 

__new__:在建立實例化時發生做用,在__init__以前執行,主要做用是建立實例對象,典型的應用是在單利模式中.函數

class Singleton(object):

    def __new__(cls, *args, **kw):

        if not hasattr(cls, '_instance'):

            org = super(Singleton, cls)

            cls._instance = org.__new__(cls, *args, **kw)

        return cls._instance

 

__class__:是示例對象的屬性,該屬性指向了實例化該對象的類,表明實例化該對象的抽象類,能夠經過它調用類的方法和類屬性。spa

class Test:
    name = "抽象類"

    def __init__(self):
        self.name = '實例名字'

    def test(self):
        print('實例方法')


test = Test()
test.__class__.name  # Out[21]: '抽象類'
test.__class__.test(1)  # 實例方法

 

__str__:實例化對象的字符串表示(表明名字),面向用戶,經過print輸出實例化類的結果3d

class Test:
    def __str__(self):
        return '這是實例化類的說明書'

test = Test()
print(test)  # 這是實例化類的說明書

 

__repr__:實例化對象的字符串表示,面向開發者的code

class Test:
    def __str__(self):
        return '用戶可見'

    def __repr__(self):
        return '開發者可見'


test = Test()
print(test)  # 用戶可見
test  # Out[30]: 開發者可見  在控制檯輸出實例化對象時的顯示信息

 

__del__:當一個實例化對象被刪除時,該方法將調用,該方法是執行刪除對象的操做。對象

class Test:
    def __del__(self):
        print('我被刪除了】')


test = Test()
del test  # 我被刪了

 

__dict__:類或實例化對象的屬性字典blog

class Test:
    name = "抽象類"
    def __init__(self):
        self.name = '實例名字'

    def test(self):
        print('實例方法')        


test = Test()
test.__dict__
Out[51]: {'name': '實例名字'}

Test.__dict__

Out[52]: 

mappingproxy({'__dict__': <attribute '__dict__' of 'Test' objects>,

              '__doc__': None,

              '__init__': <function __main__.Test.__init__>,

              '__module__': '__main__',

              '__weakref__': <attribute '__weakref__' of 'Test' objects>,

              'name': '抽象類',

              'test': <function __main__.Test.test>})
 

__doc__:是對函數/方法/模塊所實現功能的簡單描述,但當指向具體對象時,會顯示此對象.繼承

class Test:
    """我是說明書"""  


test = Test()
test.__doc__
Out[60]: '我是說明書'

 

__getattribute__:屬性攔截器,內部攔截修改某個屬性的值

class Test:
    def __init__(self):
        self.name = '正常名字'

    def __getattribute__(self, name):
        return '攔截後名字'


test = Test()
test.name
Out[63]: '攔截後名字'

 

__bases__:查詢類的父類元素

class A:
    pass

class B:
    pass

class C(A, B):
    pass

C.__bases__
Out[94]: (__main__.A, __main__.B)
 

內建屬性通常是不建議修改,若是要修改那麼儘可能將整套的內建屬性複寫,不然容易出現錯誤。

2019-03-12-17_30_41.png

相關文章
相關標籤/搜索