簡體   English   中英

python類之間的循環依賴

[英]Circular dependency between python classes

在 python 中,類定義可以像這樣相互依賴:

 # This is not fine
 class A():
     b = B().do_sth();
     def do_sth(self):
         pass

 class B():
     a = A().do_sth();
     def do_sth(self):
         pass

 # This is fine
 def FuncA():
     b = FuncB()

 def FuncB():
     a = FuncA()
  1. 為什么類有這個問題,而函數沒有?
  2. 像 C++ 這樣的語言有聲明: class B來解決這種依賴,python 有類似的構造嗎?

在函數情況下,我們實際上不必調用 FuncB 來定義 FuncA。 只有在我們實際調用 FuncA 時才需要調用 FuncB。

與函數不同,類的主體在定義時執行。 要定義類 A,我們需要實際調用 B 方法,我們不能這樣做,因為類 B 尚未定義。

為了解決這個問題,我們可以定義類,然后添加屬性:

class A(object):
    ...

class B(object):
    ...

A.b = B.do_sth()
B.A = A.do_sth()

但是,如果每個do_sth調用都依賴於已經執行的另一個調用,則此解決方案將不起作用。 您將需要執行更廣泛的更改來解決問題。

  1. 類有這些問題,因為類級別上的指令 ( b = B.do_smth() ) 是在定義類時執行的,而不是在創建類的實例時執行
  2. 在定義了兩個類之后,您可以在最近完成一個類的定義。 Python畢竟是一種動態語言。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM