【问题标题】:Python - Import class function/method from main to use in another filePython - 从 main 导入类函数/方法以在另一个文件中使用
【发布时间】:2026-01-13 19:00:01
【问题描述】:

我有两个文件 - main.py 和 uploadfile.py。 Main.py (GUI) 接受用户输入,并将其提供给 uploadfile.py 进行处理。我在 main 中有一个条目 from uploadfile import Uploader,它允许 main 与 uploadfile 对话。

我需要进行错误处理,如果出现错误,我需要从uploadfile.py 调用驻留在main.py 中的errorfunc(这是为了显示一个带有相关错误的警报窗口)。

main.py

class ErrorHandling (QDialog):
   def __init__(self, ErrorObject):
   QMessageBox.__init__(self)

   def errorfunction(self):
       print("error!")

上传文件.py

class Uploder:
      def __init__(self):

      def uploadfile(self, item1frommain, item2frommain)
          for Files in self.Filestoupload:
              try:
                 self.FileCopy(FilePaths, Metadata)
              except Exception as errno:
                 errorfunction(errno) #<--- placeholder as unsure how to achieve

抱歉,如果此代码不完整,主要和上传文件相当大,无法完整发布。我会很感激知道我会这样做的方式(调用 main 中的类方法/函数)。请注意,尝试 from main import ErrorHandling 会导致 main 不再运行,并出现错误 cannot import name Uploader from uploadfile

【问题讨论】:

    标签: python python-3.x python-class


    【解决方案1】:

    您可以在构造函数中交出所需的类,例如

    class Uploder:
         def __init__(self, errorhandler):
             self.errorhandler = errorhandler()
    
         def uploadfile(self, item1frommain, item2frommain):
             ...
             self.errorhandler.errorfunction(errno)
    

    main.py

    Uploader(ErrorHandling)
    

    备注:上传者的拼写应该是正确的

    【讨论】:

    • 谢谢。当您在main.py 中说要添加Uploader(ErrorHandling) 时,会去哪里?
    • 它将取代您对Uploader的正常呼叫。
    【解决方案2】:

    在 uploader.py 顶部添加任何导入语句(main.py)将导致循环导入错误。两种补救方法。

    1. ErrorHandling 移至新的 utils.py 模块
    2. except子句中写入import语句
    try:
      self.FileCopy(FilePaths, Metadata)          
    except Exception as errno:
      from main import ErrorHandling
      ErrorHandling(errno)
      ...
      ...
    

    【讨论】:

    • 效果很好,谢谢。这是一种可接受的方式吗?