簡體   English   中英

通過接口打破Python中的循環依賴

[英]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.

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