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

Joh*_*cey 1 python module class

你好,我仍然是面向对象编程以及python的新手,我有点卡住了.

我有三个文件,一个文件包含一个类,另一个文件访问该类,第三个文件需要访问在主文件中创建的对象.

类文件

#Class.py
class myclass:
   def method(self, value)
   return value
Run Code Online (Sandbox Code Playgroud)

主文件

#Main file

import Class

Myobj = Class.myclass
Run Code Online (Sandbox Code Playgroud)

档案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
Run Code Online (Sandbox Code Playgroud)

在我的程序中,主文件将初始化类(类将在文件中读取,并在初始化时将文件的内容分配给数组).

类文件还预先形成数学运算(类文件中的方法函数),但此函数依赖于在文件3中计算的值.

所以我需要myobj.method(x)将在文件3中输出的值,x的值将随着程序的运行而改变,所以我最终会得到myobj.method(x)的几个输出

问题是主文件可以是用户选择的任何名称,所以我不能简单地将main导入到文件3中.

Mar*_*ers 5

如果存储第一个输出,则只能这样做myobj.method(3):

#Main file

import Class

myobj = Class.myclass()
output = myobj.method(3)
Run Code Online (Sandbox Code Playgroud)

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

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

但是,听起来好像你想将某种API暴露给第三方,它将导入两者Class和你的第三个模块.在这种情况下,让API的用户改为在第3个库中调用hook方法,或者让它设置一个值:

import thirdmodule

thirdmodule.configure(myobj.method(3))
Run Code Online (Sandbox Code Playgroud)

这也巧妙地避免了循环进口.

另一种选择是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
Run Code Online (Sandbox Code Playgroud)