私は同じクラスのオブジェクトの静的参照リストを格納したいクラスを持っています。たとえば、クラスレベルの属性に(自分の)インスタンスのリストを格納していますか?
class Apple:
NICE_APPLES = [Apple('Elstar', 'Green'), Apple('Braeburn', 'Red'),
Apple('Pink Lady', 'Pink')]
def __init__(self, name, colour):
self.name = name
self.colour = colour
この結果、NameError: name 'Apple' is not defined
というエラーになります。 なぜこれは機能しませんか?
私は、コンソール上で動作するように思われる、次のようにコードを変更しました:
class Apple:
NICE_APPLES = []
def __init__(self, name, colour):
self.name = name
self.colour = colour
Apple.NICE_APPLES = [Apple('Elstar', 'Green'), Apple('Braeburn', 'Red'),
Apple('Pink Lady', 'Pink')]
はこれを行うには良い方法はありますか? これはモジュールの内部と外部で動作しますか?これはモジュールをインポートする方法に依存しますか?
クラスの作成が完了するまで、クラスのインスタンスを作成することはできません。それが作成される前に、名前に縛られることはありません。 – jonrsharpe
これは[XY](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)の問題のようです。なぜあなたはこれをしたいのですか?あなたは何を達成しようとしていますか? –
このアプローチの潜在的な問題は、インスタンスがリストに追加される場所に関係なく、インスタンスが削除されたときに自動的に削除されるメカニズムがないため、リストを維持することです。より良い方法は、リストや辞書などの既存のコンテナクラスの1つ、またはおそらく独自のカスタムクラスを使用することです。クラスは、自分自身のインスタンスの存在(または存在しない)には関係してはいけません。一方、あなたのインスタンスは 'Apple'のサブクラスであるべきです。その場合、それらを追跡する' class .__ subclasses __() 'があります。 – martineau