1. 程式人生 > >Python 面向物件 - __slots__

Python 面向物件 - __slots__

預設情況下,Python 用一個字典來儲存一個物件的例項屬性。這使得我們可以在執行的時候動態的給類的例項新增新的屬性:

test = Test()
test.new_key = 'new_value'

然而這個字典浪費了多餘的空間 — 很多時候我們不會建立那麼多的屬性。因此通過slots可以告訴 Python 不要使用字典而是固定集合來分配空間。

class Test(object):
    # 用列表羅列所有的屬性
    __slots__ = ['name', 'value']
    def __init__(self, name='test', value='0'
)
:
self.name = name self.value = value test = Test() # 此時再增加新的屬性則會報錯 test.new_key = 'new_value' # AttributeError: 'Test' object has no attribute 'new_key'