Python でオブジェクト指向プログラミングを使用する場合、クラスのすべてのインスタンスにアクセスして出力する必要がある場合があります。特定のクラス。ここでは、このタスクを実行するための 2 つのメソッドについて詳しく説明します。
このアプローチは Python ガベージ コレクターを利用します。
import gc for obj in gc.get_objects(): if isinstance(obj, some_class): print(obj)
このメソッドはメモリ内のすべてのオブジェクトをスキャンします。ただし、オブジェクトの数が多いとパフォーマンスが低下するという欠点があります。さらに、制御できないオブジェクト タイプでは実行できない場合があります。
別の方法では、mixin クラスと弱い参照を利用します:
from collections import defaultdict import weakref class KeepRefs(object): __refs__ = defaultdict(list) def __init__(self): self.__refs__[self.__class__].append(weakref.ref(self)) @classmethod def get_instances(cls): for inst_ref in cls.__refs__[cls]: inst = inst_ref() if inst is not None: yield inst class X(KeepRefs): def __init__(self, name): super(X, self).__init__() self.name = name x = X("x") y = X("y") for r in X.get_instances(): print(r.name) del y for r in X.get_instances(): print(r.name)
こちら、各インスタンスは弱参照としてリストに登録されます。このアプローチはより効率的ですが、ミックスイン クラスを使用し、適切な初期化を確実に行う必要があります。
クラスのすべてのインスタンスを出力する方法の選択は、特定の状況によって異なります。オブジェクトの数、オブジェクト タイプの制御、パフォーマンス要件などの要素を考慮します。ここで紹介する両方の方法は、このタスクに対して実行可能なソリューションを提供します。
以上がPython クラスのすべてのインスタンスを反復するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。