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

2024-04-19 23:43:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类,里面有几个函数。在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”类的新实例。但我不想那样。你知道吗

有人能在这方面帮助我吗?提前谢谢。你知道吗


Tags: 文件实例函数nameselfifinitmain
3条回答

可以将处理程序实例传递给适配器类

from file2 import adapter

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

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

if __name__ == "__main__" :
   currentHandler = requestHandler()
   a = adapter()
   a.processRequest(currentHandler)

。。你知道吗

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

    def processRequest(self, handler):
        # You now have a reference to that instance within this method
        doWork(handler)

Python程序有两种基本风格:脚本-这是通过单击命令行运行的顶级程序,等等。。。以及导入的模块。python程序是一个名为__main__脚本和任意数量的导入模块(通常以程序的文件名命名)。你知道吗

您的file1.py可以是脚本或模块,具体取决于您如何运行它。但是,if __name__ == "__main__"语句告诉我们,只有当file1.py作为顶级脚本运行时,才会创建所需的对象。你知道吗

现在我们有问题了。如果导入顶级脚本,则会得到脚本的第二个独立副本,并且在脚本中创建的内容在导入的版本中都不可用。你知道吗

那你怎么办?嗯,第一件事是退一步看看你的项目设计。通常,您应该将要共享的内容放在模块中,而不是脚本中。您不希望模块仅仅因为文件被导入就执行创建requestHandler之类的操作。但是工厂方法会很有效。你知道吗

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

请求处理程序.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

现在,顶级脚本或任何其他molude都可以

import requesthandler
handler = requesthandler.get_request_handler()

要使用另一个脚本中的currentHandler

currentHandler = requestHandler()

不得在以下条件下:

if __name__ == "__main__":

声明。它必须在if语句之外。你知道吗

示例:

文件1

class a():
    def f(self):
        print 4
b = a()

控制台:

导入文件1

文件1.b.f()

4个

相关问题 更多 >