這段代碼是怎麼運行的?我不知道如何讓__slots__工作
class Foo():
__slots__ = []
def __init__(self):
self.should_not_work = "or does it?"
print "This code does not run,",self.should_not_work
Foo()
我想插槽做過限制。我正在運行Python 2.6.6。
這段代碼是怎麼運行的?我不知道如何讓__slots__工作
class Foo():
__slots__ = []
def __init__(self):
self.should_not_work = "or does it?"
print "This code does not run,",self.should_not_work
Foo()
我想插槽做過限制。我正在運行Python 2.6.6。
__slots__
機制適用於新式類。你應該繼承object
。
類聲明更改爲
class Foo(object):
# etc...
__slots__
提供內存使用的小優化,因爲它可以防止__dict__
被分配到存儲實例的屬性。如果您有大量實例,這可能會很有用。
您所談論的限制大多是其實施方式的意外副作用。特別是,如果您的類繼承自沒有__dict__
(例如object
)的基類並且即使不會在任何子類中分配__dict__
,也會停止創建__dict__
,除非它們也定義了__slots__
。它並不是作爲一種安全機制,所以最好不要嘗試像這樣使用它。
所有舊式課程自動獲得__dict__
,因此__slots__
不起作用。如果你從object
繼承,你會得到你正在尋找的效果,但基本上不要打擾__slots__
,直到你知道你有數百萬的實例和內存是一個問題。
太棒了!謝謝! – 2011-02-01 09:25:37