インスタンスのすべてのスロットを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のビジネスアイテムを処理するために、これらのクラスを使用する理由(」タグ ":リッチクライアント、PyQt、記述子による属性アクセス、参照の遅延解決、タイプ検証)。私はこれらのオブジェクトを100万個まで持っているので、メモリ要件が問題になるかもしれません(現実世界のデータが適切でない場合でも - あなたが思っていることを知っています...すべての悪の根源... - ))。しかし、動的な属性の作成も禁止する必要があります。これにより、新しく作成されたオブジェクトをサーバーにコミットするときに「ガベージ」属性がないことが確認されます。 – Knack