<p>这个问题已经被问了一次又一次,而且没有什么特定于Python的。要对另一个类的<em>实例</em>调用方法,需要对该实例进行引用。非常明显的解决方案是在调用时传递此引用:</p>
<pre><code>class A(object):
def __init__(self, var_a):
self.var_a = var_a
def method(self, another_object):
return another_object.another_method(self.var_a)
class B(object):
def __init__(self, var_b):
self.var_b = var_b
def another_method(self, var):
return self.var_b + var
a = A(42)
b = B(1138)
print a.method(b)
</code></pre>
<p>或在实例化时:</p>
<pre><code>class A(object):
def __init__(self, var_a, another_object):
self.var_a = var_a
self.another_object = another_object
def method(self):
return self.another_object.another_method(self.var_a)
class B(object):
def __init__(self, var_b):
self.var_b = var_b
def another_method(self, var):
return self.var_b + var
b = b(1138)
a = A(b)
print a.method()
</code></pre>
<p>请注意,在这两种情况下,<code>B</code>不需要了解类<code>A</code>—它只获取一个作为param的实例,仅此而已。因此,如果<code>A</code>和<code>B</code>位于不同的模块中,则包含<code>B</code>的模块不必导入包含<code>A</code>的模块:</p>
<pre><code># module b.py
class B(object):
def __init__(self, var_b):
self.var_b = var_b
def another_method(self, var):
return self.var_b + var
# module a.py
from b import B
class A(object):
def __init__(self, var_a, another_object):
self.var_a = var_a
self.another_object = another_object
def method(self):
return self.another_object.another_method(self.var_a)
if __name__ == "__main__":
b = b(1138)
a = A(b)
print a.method()
</code></pre>
<p>这避免了循环导入错误,显然您已经给出了您的回溯。你知道吗</p>