新式類的高級特性

1、__slots__類屬性
__dict__屬性跟蹤所有的實例屬性,但其會佔據大量內存。如果一個類的屬性數量較少,且不會
動態添加屬性,我們可以使用__slots__代替__dict__,例子:

class SlottedClass(object):
    __slots__=('foo','bar')

c = SlottedClass()
c.foo = 42
c.xxx = "don't exist" 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'SlottedClass' object has no attribute 'xxx'

這種特性的作用是節省內存。副作用是用戶無法隨心所欲的動態增加實例屬性。
2、特殊方法__getattribute__()
有一個名爲__getattr__()的方法,僅當屬性不能再實例的__dict__或他的類的__dict__
或者祖先類的__dict__中找到時,才被調用。而__getattribute__()的區別是,當屬性被
訪問時,它就被調用,不侷限與找不到的情況。
注意:避免在__getattribute__()中直接或間接地調用__getattribute__(),以免造成無
窮遞歸,爲安全地訪問它所需要的屬性,應先調用祖先類的同名方法super(obj,super).__getattribute__()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章