你好,我仍然是面向对象编程以及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)的几个输出
问题是主文件可以是用户选择的任何名称,所以我不能简单地将main导入到文件3中。
答案 0 :(得分:5)
如果您首先存储 myobj.method(3)
的输出,则只能这样做:
#Main file
import Class
myobj = Class.myclass()
output = myobj.method(3)
现在,您可以在导入Main.output
之后引用Main
。
print
不存储任何内容;它所做的就是将后面的表达式转换为字符串,并将这些字符串写入标准输出。从技术上讲,您可以尝试替换sys.stdout
,但之后您只会捕获字符串,而不是实际的原始值。
然而,听起来好像你想向某个第三方公开某种API,它会导入Class
和你的第3个模块。在这种情况下,让API的用户改为在第3个库中调用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
答案 1 :(得分:0)
嗯,对于初学者来说,你会想要改变你的方法定义:
def method(self, value):
return value
其次,在你的主文件中,我们假设它被称为mainfile.py,你必须将myobj.method(3)
的值分配给某个变量。我们称之为val
。
然后您的打印行变为a = myobj.method(3)
然后,在第三个文件中,使用import mainfile
导入主文件。 .py
扩展名是不必要的。过去,这很简单:您的输出存储在变量mainfile.val
中;你可以访问它。
哦,同样,在您的主文件中,您首先调用了对象Myobj
,然后调用myobj
,您可能想要解决此问题。