python类之间的循环依赖

时间:2014-04-12 05:33:29

标签: python

在python中,类定义可能依赖于彼此:

 # This is not fine
 class A():
     b = B().do_sth();
     def do_sth(self):
         pass

 class B():
     a = A().do_sth();
     def do_sth(self):
         pass

 # This is fine
 def FuncA():
     b = FuncB()

 def FuncB():
     a = FuncA()
  1. 为什么clases有这个问题,而函数没有?
  2. 像C ++这样的语言有声明:class B来解决这种依赖,python是否有类似的结构?

2 个答案:

答案 0 :(得分:9)

在功能案例中,我们实际上不必调用FuncB来定义FuncA。当我们实际调用FuncA时,只需要调用FuncB。

与函数不同,类的主体在定义时执行。要定义A类,我们需要实际调用一个B方法,我们不能这样做,因为B类尚未定义。

要解决此问题,我们可以定义类,然后添加属性:

class A(object):
    ...

class B(object):
    ...

A.b = B.do_sth()
B.A = A.do_sth()

如果每个do_sth调用依赖于已执行的另一个调用,则此解析将无效。您需要执行更广泛的更改来解决问题。

答案 1 :(得分:3)

  1. 类存在这些问题,因为在定义类时执行类级别(b = B.do_smth())上的指令,而不是在创建类的实例时执行
  2. 在定义了两个类之后,您最近可以完成类的定义。毕竟,Python是一种动态语言。