通过接口打破Python中的循环依赖

2024-04-26 09:37:24 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的代码可以用来破坏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();
      //...
   }
}

Tags: 代码关系a1方式javapublicthisinterface
1条回答
网友
1楼 · 发布于 2024-04-26 09:37:24

最简单、通常也是最具python风格的方法是依赖duck类型,因此依赖关系在静态代码中不是显式的,也没有循环性。在

在Java中需要接口的原因是Java强制B类给其a成员一个静态类型,类似地,a参数给其构造函数。在Python中没有必要这样做,因为变量没有类型(值当然有,但是任何变量都可以包含任何类型的值)。如果你想显式地强制执行检查,你可以使用一个^{})作为接口,可以,但它真的没有给你带来任何好处。最好让鸭子变成鸭子:

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没有什么不同…)

相关问题 更多 >