[英]I don't know how to make __slots__ work
為什么這個代碼會為我運行?
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__
提供了一個小的內存使用優化,因為它可以防止__dict__
被分配來存儲實例的屬性。 如果您有大量實例,這可能很有用。
你所談論的限制主要是它實施方式的偶然副作用。 特別是它只停止創建一個__dict__
如果你的類繼承自沒有__dict__
的基類(比如object
),即使那樣它也不會停止在任何子類中分配__dict__
,除非它們也定義__slots__
。 它不是一種安全機制,因此最好不要嘗試使用它。
所有舊式類都會自動獲取__dict__
,因此__slots__
無效。 如果你從object
繼承,你將獲得你正在尋找的效果,但基本上不要打擾__slots__
直到你知道你有數百萬個實例和內存是一個問題。
__slots__
機制適用於新式類。 你應該繼承自object
。
將類聲明更改為
class Foo(object):
# etc...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.