gpt4 book ai didi

python - 可以从另一个文件访问在 python 文件中声明的类的特定实例吗?

转载 作者:太空宇宙 更新时间:2023-11-04 00:49:05 25 4
gpt4 key购买 nike

我有一个类,其中有几个函数。在 file1 中,我创建了该类的一个实例。

class requestHandler():
def __init__(self):
......

def processRequest(self,command):
......
if __name__ == "__main__" :
currentHandler = requestHandler()

现在,我想从另一个文件访问这个“currentHandler”实例。我尝试了几种方法,但都失败了。如果我这样尝试:

import file1

class adapter:
def __init__(self):
command = "move"
.......

def processRequest(self):
d = file1.requestHandler()
d.processRequest(command)

它创建了一个“requestHandler”类的新实例。但我不想那样。

有人可以在这方面帮助我吗?提前致谢。

最佳答案

Python 程序有两种基本类型:脚本 - 这是您从命令行运行的顶级程序,通过单击它们等...和导入的模块。一个 Python 程序是一个名为 __main__脚本和任意数量的导入模块(通常以程序的文件名命名)。

您的 file1.py 可以是脚本或模块,具体取决于您运行它的方式。但是,您的 if __name__ == "__main__" 语句告诉我们您想要的对象仅在 file1.py 作为顶级脚本运行时创建。 p>

现在我们有一个问题。如果您导入顶级脚本,您将获得脚本的第二个独立副本,并且您在脚本中创建的内容在导入版本中不可用。

那你怎么办呢?那么,第一件事就是退后一步,看看你的项目的设计。你通常应该把你想分享的东西放在模块中,而不是脚本中。您不希望模块仅仅因为文件被导入就采取诸如创建 requestHandler 之类的操作。但是工厂方法会工作得很好。

因此,创建一个模块(即在python路径某处可见的python程序)

requesthandler.py

import threading

class requestHandler():
def __init__(self):
......

def processRequest(self,command):
......

_common_request_handler = None
_common_request_handler_lock = threading.Lock()

def get_request_handler():
global _common_request_handler
with _common_request_handler_lock:
if not _common_request_hander:
_common_request_hander = requestHandler()
return _common_request_handler

现在顶层脚本或任何其他模块都可以

import requesthandler
handler = requesthandler.get_request_handler()

关于python - 可以从另一个文件访问在 python 文件中声明的类的特定实例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37956218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com