【发布时间】:2018-08-05 08:41:36
【问题描述】:
我希望有一个直接作用于另一个类的特定实例的类方法。如果两个类都在同一个模块中定义和实例化,我可以实现这一点,但是当我尝试将这些类导入第二个模块时它就会崩溃。
这是一个显示我的问题的测试代码sn-p:
# Module 1
class Foo:
def __init__(self):
self.value = 1
def get_value(self):
return self.value
def increase_value(self):
self.value += 1
class Bar:
def read_foo(self):
foo_value = foo.get_value()
#Do something with Foo_value
return foo_value
然后,在另一个模块中,使用与类方法名称匹配的严格名称创建这些类中的每一个的实例。
# Module 2
import test
foo = test.Foo()
bar = test.Bar()
print(bar.read_foo())
现在,当模块 2 运行时,它返回一个“未定义 foo”错误,因为 foo 不是在模块 1 中创建的。我该如何解决这个问题?
编辑:我在第一条评论中提到的解决方案是将 foo 作为参数传递给类方法 read_foo,如下所示:
class Bar:
def read_foo(self, foo):
foo_value = foo.get_value()
#Do something with Foo_value
return foo_value
【问题讨论】:
-
这些模块是您自己编写的还是 PyPI 模块?这似乎不起作用,因为 Bar 的 read_foo() 函数正在访问一个不是全局变量或未在函数中定义的变量 (foo)。如果这是您编写的模块,您可以尝试将 Foo 类型的对象传入 Bar 的 read_foo() 函数
-
我自己编写了这些模块。现在我觉得自己像个白痴,因为你的解决方案太简单了!非常感谢
标签: python python-3.x class import class-method