[英]Breaking circular dependency in Python via interfaces
下面的代碼可用於打破Java中的循環依賴關系。
用Python的方式是什么?
interface A {
int A1();
}
class X implements A {
B b;
public int X1() {
b = B(this);
b.doSomething();
}
public int A1() { ... }
}
class B {
A a;
public B(A a) {
this.a = a;
}
public doSomething() {
//...
this.a.A1();
//...
}
}
執行此操作的最簡單(通常是最Python化)的方法是依賴於Duck類型,因此在靜態代碼中依賴性不是顯式的,並且不存在循環性。
你需要的Java接口的原因是因為Java迫使B
類給予靜態類型的a
成員,同樣的a
參數的構造函數。 在Python中不需要這樣做,因為變量沒有類型(值當然是類型,但是任何變量都可以保存任何類型的值)。 如果您想顯式地強制執行檢查,則可以通過使用abc
)作為接口來實現,但實際上並沒有買任何東西。 最好只是讓鴨子成為鴨子:
class X(object):
def x1(self):
self.b = B(self)
self.b.do_something()
def a1(self):
# ...
class B(object):
def __init__(self, a):
self.a = a
def do_something(self):
self.a.a1()
當然, 動態圓度仍然存在,但這不是問題。 (嗯,循環引用可能是一個問題,但通常不是問題,這不是您擔心的問題,與Java沒有什么不同……)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.