【问题标题】:How to automatically Import all subclasses of a root class in Python?如何在 Python 中自动导入根类的所有子类?
【发布时间】:2010-11-19 16:58:36
【问题描述】:

我想知道是否可以在 python 中自动导入一个类的所有子类,而无需为每个子类编写 import subclassxy。

【问题讨论】:

    标签: python class import


    【解决方案1】:

    一般来说,你不能。解释器无法知道特定包是否定义了您感兴趣的类的子类。原则上,您明天可以编写一个新的包或模块来定义一个新的子类。现在需要导入它。对于口译员来说,跟踪所有这些将是非常繁重的。

    您可以构建一个包来导入所有感兴趣的子类。

    【讨论】:

      【解决方案2】:

      这是一个草稿示例,可以让您了解自己想要做什么:

      my_module.py

      class RootClass(object):
          pass
      
      class ChildClass(RootClass):
          pass
      

      在另一个文件.py中

      import sys
      
      from my_module import RootClass
      
      # Loop over all subclasses of RootClass.
      for class_ in RootClass.__subclasses__():
          # from module import subclass.
          __import__(class_.__module__, globals(), locals(), [class_.__name__,])
      
          # Update the global namespace with the new class
          globals().update({class_.__name__:
                            getattr(sys.modules[class_.__module__], 
                                    class_.__name__)})
      
      print ChildClass
      # OutPut : <class 'my_module.ChildClass'>
      

      PS:我不建议你这样做!!!!

      【讨论】:

      • 这仅适用于已经导入的子类,因此它没有达到目的。
      • @Dan Ellis:这不是我从 OP 问题中所理解的,我认为他已经定义了他的子类,他想在不知道基类的情况下导入所有子类:import subclass1, subclass2 .. .
      【解决方案3】:

      您可以创建一个模块,为每个子类(可能是自动生成的)和 from module import * 它执行 import subclassxy

      【讨论】:

        【解决方案4】:

        这根本不可能,因为 Python 无法知道存在哪些子类,直到它已经看到它们(此时它们将位于基类的 subclasses 属性中)。

        您为什么不告诉我们您真正想要实现的目标?这样,我们可以帮助您找到解决方案。

        【讨论】:

        • 我希望能够使用子类而无需在任何地方显式导入它们,这样我就可以创建一个新的子类并在其他地方使用它。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-10
        • 2012-01-09
        • 1970-01-01
        • 2018-06-12
        • 1970-01-01
        相关资源
        最近更新 更多