gpt4 book ai didi

java - 通过接口(interface)打破 Python 中的循环依赖

转载 作者:行者123 更新时间:2023-12-02 06:47:14 29 4
gpt4 key购买 nike

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

Pythonic 的方式是什么?

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();
//...
}
}

最佳答案

最简单且通常最 Pythonic 的方法是依赖鸭子类型,因此静态代码中的依赖关系并不明确,并且不存在循环性。

在 Java 中需要接口(interface)的原因是 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没有什么不同......)

关于java - 通过接口(interface)打破 Python 中的循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18499858/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com