如何在python中跨文件共享全局类实例?

How to share a global class instance in python across files?

提问人:Philippos 提问时间:11/7/2023 最后编辑:Philippos 更新时间:11/8/2023 访问量:51

问:

最近我开始用python3为一些简单的语言编写一个解释器。一切都很顺利,直到我尝试将模块分成单独的文件。您可以在任何地方阅读的是创建一个全局文件,您可以在其中创建全局变量,从其他文件导入它并将它们与文件的前缀一起使用,就像这个答案一样。

但是,如果我想共享的变量是其中一个文件中定义的类的实例,该怎么办?

globals.py:

def init(param):
    global myGlobal
    myGlobal = MyClass(param)

classes.py:

import globals

class MyClass:
    def __init__(self, param):
        self.param = param
    def foo(self):
        param += 1
    def other(self, o):
        o.doSomething()

class OtherClass:
    def bar(self):
        global.myGlobal.foo()
    def doSomething(self):
        pass
    

main.py:

import globals
from classes import MyClass, OtherClass

globals.init(42)
x = OtherClass()
x.bar()
globals.myGlobal.foo()

似乎我需要初始化 ,但一定不知道 中的类。如何进行?myGlobalglobals.pyglobals.pyclasses.py

python 模块 依赖项 全局变量

评论

0赞 Tranbi 11/7/2023
你为什么不把参数传递给你的函数?eperror
0赞 Philippos 11/7/2023
@Tranbi 即使不知道什么是,那也行得通吗?并且仍然在 中实例化,但需要在 中知道,但是总是将其作为每个调用的参数会弄乱代码......errorExecutionPointerepxMainxClasses
0赞 Tranbi 11/7/2023
error可以采用 as 参数,而无需导入 中的类。但是,您可能需要重新考虑您的设计。您是否考虑过将实现为类方法?ExecutionPointerxToolserror
0赞 Philippos 11/8/2023
是的,这个问题是关于我想重新思考我的设计。我只是看不出怎么回事。制作一种方法确实解决了这个问题,但是我还有很多其他地方需要访问这两个文件。errorExecution Pointerep
0赞 Philippos 11/8/2023
@Tranbi我现在试图把问题说得更清楚。

答: 暂无答案