我需要使用None初始化實例的所有插槽。我如何獲得派生類的所有插槽?獲取派生類的所有__slots__
例(其中不工作):
class A(object):
__slots__ = "a"
def __init__(self):
# this does not work for inherited classes
for slot in type(self).__slots__:
setattr(self, slot, None)
class B(A):
__slots__ = "b"
我可以用持有的插槽一個附加的類屬性(包括繼承)的所有類,像
class A(object):
__slots__ = "a"
all_slots = "a"
def __init__(self):
# this does not work for inherited classes
for slot in type(self).all_slots:
setattr(self, slot, None)
class B(A):
__slots__ = "b"
all_slots = ["a", "b"]
,但似乎次優的。
任何意見都表示讚賞!
乾杯,
月
爲什麼你需要'__slots__' –
我使用這些類來處理客戶端的JSON商業項目(」標籤「:richt客戶端,PyQt,通過描述符進行屬性訪問,引用的延遲解析,類型驗證)。我有多達100萬個這樣的對象,因此內存需求可能是一個問題(即使我現在沒有合適的真實世界數據 - 我知道你在想什麼......所有邪惡的根源......; ))。但我也需要禁止任何動態屬性的創建。這確保在將新創建的對象提交回服務器時沒有「垃圾」屬性。 – Knack