当类也在不同的模块中时,从另一个模块访问对象?

时间:2013-10-03 17:01:47

标签: python class module

你好,我仍然是面向对象编程以及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中。

2 个答案:

答案 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,您可能想要解决此问题。