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

标签 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) 得到几个输出

问题是主文件可以是用户选择的任何名称,所以我不能简单地将主文件导入文件 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/

相关文章:

java - hadoop os x mrjob $ HADOOP_HOME未设置

java - 如果传递到另一个类(class),我的类(class)会更新吗?

php - Symfonys Autoloader - 实现父命名空间

python - 无法从 site-packages 目录加载通过 pip 安装的 Python 模块

javascript - 来自另一个模块的 Angular JS 服务 DI

Python 连接到 AWS EC2 中的 Teradata

python - 使用 django-rest-framework 设置对象级权限

python - 用零和一替换数据框中的值

linux - 在 Linux 上使用 Node 0.12.7 获取 "Unexpected reserved word"

module - Cygwin 和 OCaml : OPAM + Batteries