0

如果我想在兩個類中使用註釋,在不同的模塊中是交叉的?Circular imports and annotations

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'?但是,如果我需要對此進行註釋,該怎麼辦?

另外,如果我只需要導入AModule \ BModule和使用類作爲模塊AModule.A的屬性我AttributeError: module 'BModule' has no attribute 'B'

回答

0

是什麼迫使依賴?在我看來,在這種情況下,任何需要B的方法A都可以作爲B上的方法實現,該方法需要A,因此請將其中一個類設置爲「main」類,並使用該類對類其他班級,如果這是有道理的?

+0

在我的情況下,這是不舒服的。這些模塊放置在不同的環境(服務)中。並接收對象的「郵箱」(不是直接對象,但包含這些對象的API)。 因此,方法將從B發送一些信息給A或從A發送給B(取決於情況)。 – Broly

+0

我不確定我完全理解你的意思。你能否在一個要點或某個地方提供一個更詳細的例子(不需要污染原始問題)?這聽起來像整個系統的架構需要查看以消除依賴關係。除非當然,否則很樂意放棄在此特定實例中註釋類型的要求。 – kfb

+0

註解用於生成C++代碼(不僅用Python編寫的服務)和序列化。在C++中,我可以使用'forward declaration'來避免循環依賴。 但是,如果args註釋,我可以大膽調用特定的方法毫無疑問。 我想我可以使用字符串註釋,但它並不漂亮。 – Broly