首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过接口打破Python中的循环依赖关系

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

Stack Overflow用户
提问于 2013-08-28 23:20:39
回答 1查看 326关注 0票数 1

下面的代码可以用于打破Java中的循环依赖关系。

这是什么毕达通的方式?

代码语言:javascript
复制
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();
      //...
   }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-28 23:25:35

要做到这一点,最简单、也通常也是最重要的一种方法是依赖鸭子类型,因此在静态代码中没有明确的依赖项,也没有循环性。

在Java中需要接口的原因是因为Java强制B类向其a成员提供静态类型,而a参数则类似地为其构造函数提供静态类型。在Python中不需要这样做,因为变量没有类型(当然有值,但是任何变量都可以保存任何类型的值)。如果要显式强制检查,可以使用abc)作为接口…但它真的不会给你买任何东西。最好还是让鸭子当鸭子吧:

代码语言:javascript
复制
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()

当然,仍然存在动态循环,但这不是问题。(嗯,循环引用可能是一个问题,但通常不是,这不是您所担心的问题,也与…没有什么不同)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18499858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档