你好,我对面向对象编程和 python 还是有点陌生,我有点卡住了。
我有三个文件,一个文件包含一个类,另一个文件访问这个类,第三个文件需要访问在主文件中创建的对象。
类文件
#Class.py
class myclass:
def method(self, value)
return value
主文件
#Main file
import Class
Myobj = Class.myclass
文件 3.
#file 3
x= 10
#I need to access the output of myobj.method(x) from file3 but I cannot import main
#into file 3
在我的程序中,主文件将初始化类(类将读入一个文件,并在初始化时将文件的内容分配给数组)。
类文件还执行数学运算(类文件中的方法函数),但此函数依赖于文件 3 中计算的值。
所以我需要 myobj.method(x) 将在文件 3 中输出的值,x 的值会随着程序运行而改变,所以我最终会从 myobj.method(x) 得到几个输出
问题是主文件可以是用户选择的任何名称,所以我不能简单地将主文件导入文件 3。
最佳答案
只有当您首先存储 myobj.method(3)
的输出时,您才能这样做:
#Main file
import Class
myobj = Class.myclass()
output = myobj.method(3)
导入Main
后即可引用Main.output
print
不存储任何东西;它所做的只是将其后的表达式转换为字符串并将这些字符串写入标准输出。从技术上讲,您可以尝试替换 sys.stdout
,但这样您只会捕获字符串,而不是实际的原始值。
然而,这听起来好像您想将某种 API 公开给将导入 Class
和您的第 3 个模块的第 3 方。在这种情况下,让您的 API 的用户改为调用您的第三个库中的钩子(Hook)方法,或者让它设置一个值:
import thirdmodule
thirdmodule.configure(myobj.method(3))
这也巧妙地避免了循环导入。
另一种选择是让 Class
负责更新 thirdmodule
;在 myclass.method()
的末尾添加代码以更新 thirdmodule
:
#Class.py
import thirdmodule
class myclass:
def method(self, arg):
# Do your thing
retval = some_calculation()
thirdmodule.x = retval
return retval
关于python - 当类也在不同的模块中时从另一个模块访问对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19165011/