簡體   English   中英

我不知道如何使__slots__工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM