1

你好,我对面向对象编程和 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。

4

2 回答 2

5

如果您存储myobj.method(3)first的输出,您只能这样做:

#Main file

import Class

myobj = Class.myclass()
output = myobj.method(3)

现在你可以Main.output在导入后参考Main

print不存储任何东西;它所做的只是将其后面的表达式转换为字符串并将这些字符串写入标准输出。从技术上讲,您可以尝试替换sys.stdout,但是您只能捕获字符串,而不是实际的原始值。

但是,听起来好像您想向第三方公开某种 API,该 API 将同时导入Class您的第三个模块。在这种情况下,让您的 API 用户调用您的第三个库中的钩子方法,或者让它设置一个值:

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
于 2013-10-03T17:03:21.270 回答
0

好吧,对于初学者来说,你会想要像这样改变你的方法定义:

def method(self, value):
    return value

其次,在您的主文件中,假设它名为 mainfile.py,您必须将值分配myobj.method(3)给某个变量。让我们称之为val

所以你的打印线就变成了a = myobj.method(3)

然后,在您的第三个文件中,您导入带有import mainfile. .py扩展是不必要的。除此之外,这很简单:您的输出存储在变量中mainfile.val;你可以访问它。

哦,另外,在你的主文件中,你Myobj首先调用了你的对象,然后myobj,你可能想要修复它。

于 2013-10-03T17:10:25.310 回答