Python - 从 main 导入 class function/method 以在另一个文件中使用

Python - Import class function/method from main to use in another file

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

我需要有错误处理,如果有错误我需要从uploadfile.py调用驻留在main.py的errorfunc(这是显示一个警告window 有问题的错误)。

main.py

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

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

uploadfile.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 和 uploadfile 相对 post 来说相当大。如果我知道我将如何执行此操作(调用 main 中的 class method/function),我将不胜感激。请注意,尝试 from main import ErrorHandling 导致 main 不再 运行 并出现错误 cannot import name Uploader from uploadfile.

你可以像

那样在构造函数中交出需要的class
class Uploder:
     def __init__(self, errorhandler):
         self.errorhandler = errorhandler()

     def uploadfile(self, item1frommain, item2frommain):
         ...
         self.errorhandler.errorfunction(errno)

并在 main.py

Uploader(ErrorHandling)

备注:Uploader 应该是正确的拼写

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

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