0

異なるモジュールの両方のクラスで注釈を使用したいのですが?円のインポートと注釈

from BModule import B 

class A: 
    def method(self, b: B): 
    pass 

from AModule import A 

class B: 
    def method(self, a: A): 
    pass 

私はImportError: cannot import name 'B'を得ましたか。しかし、もし私がこれに注釈を付ける必要があれば、どうしたらいいですか?私はちょうど私が依存関係を迫られて何AttributeError: module 'BModule' has no attribute 'B'

答えて

0

を得たAModule \ BModuleをインポートし、モジュールAModule.Aの属性としてクラスを使用する場合も

?この場合、Bを取るAのどのメソッドも、を受け取るBのメソッドとして実装できるので、クラスの1つを「メイン」クラスにし、そのクラスを使用してオブジェクトを操作します他のクラス、それが意味があれば?

+0

私の場合は不快です。このモジュールは異なるコンテキスト(サービス)に配置されます。また、オブジェクトの 'mailbox 'にargsを取り込みます(直接オブジェクトではなく、これらのオブジェクトのAPIを含みます)。 したがって、メソッドはAからBへ、またはBからAへと情報を送信します(状況によって異なります)。 – Broly

+0

私はあなたが何を意味するかを完全に理解しているかどうかはわかりません。最初の質問を汚す必要はありませんか?依存関係を取り除くためには、システム全体のアーキテクチャが必要なように思えます。もちろん、この特定のインスタンスに型を注釈する必要はありません。 – kfb

+0

C++コード(Pythonで書かれたサービスだけでなく)やシリアライゼーションの生成に使用されるアノテーション。 C++では、循環依存を避けるために '前方宣言'を使うことができます。 しかし、argsに注釈がついていれば、私は大胆に特定のメソッドを大胆に呼び出すことができます。 文字列アノテーションを使用できると思いますが、それほど美味しくありません。 – Broly