-3

重複の可能性:
Python 相互依存クラス (循環依存)

同じモジュール/ファイルに 2 つのクラスがあり、それらは互いに使用しています。

class ClassA:
    x = ClassB()

class ClassB:
    x = ClassA()

ClassB の宣言は ClassA の後にあるため、ClassA には問題があり、ClassB は見つかりません。

これを解決するにはどうすればよいですか?どうにかして ClassB をインポートできますか?


更新:悪い。上記の例には循環参照があり、多くの人がうんざりしていました..もう一度試してみましょう:

class ClassA:
    x = 1
    y = ClassB.x

class ClassB:
    x = 2
    y = ClassA.x

ClassA 実装の前に ClassB をインポートできますか? または、ある種の前方クラス宣言。

4

1 に答える 1

5

これは機能します:

class ClassA:
    pass

class ClassB:
    x = ClassA()

ClassA.x = ClassB()

しかし、それは本当にあなたがやりたいことですか?これを行う必要があるので、おそらくデザインを再考する必要があると思います...

もちろん、それらがクラス属性である必要がない場合(たとえば、ClassXのすべてのインスタンスが同じデータを共有する必要がないため、インスタンス属性が正常に機能する場合)、これを行うことができます。

class ClassA(object): #inheriting from object is always a good idea
    def __init__(self):
        self.x = ClassB()

class ClassB(object):
    def __init__(self):
        self.x = ClassA() 

これが機能するのは、クラスがインスタンス化されるまでオブジェクトの作成(したがって、グローバルディクショナリでのルックアップ)が行われないためです。

于 2012-08-13T16:47:47.100 に答える