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中.
如果存储第一个输出,则只能这样做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)
| 归档时间: |
|
| 查看次数: |
2392 次 |
| 最近记录: |