代码之家  ›  专栏  ›  技术社区  ›  cap

__子类没有显示任何内容

  •  1
  • cap  · 技术社区  · 6 年前

    我正在实现一个函数,它从适当的子类返回一个对象。如果我搬家 SubClass base.py ,没有子类出现 __subclasses__ . 是否要求它们在同一个文件中? 也许我从来没有直接进口 subclass.py 对python隐藏子类?我能做什么?我甚至检查过属性 __mro__ get_subclass 指向正确的类。

    # project/main.py
    from project.src.base import get_subclass
    
    obj = get_subclass(cls,name) # Returns an object of a subclass of cls
    
    # project/src/subclass.py
    from project.src.base import BaseClass
    
    class SubClass(BaseClass):
        pass
    
    # project/src/base.py
    def get_subclass(cls,name):
        subclss = cls.__subclasses__ # This is returning an empty list
        pass
    
    class BaseClass(object):
        pass
    
    1 回复  |  直到 6 年前
        1
  •  5
  •   MisterMiyagi    6 年前

    Python只运行导入的模块的代码。如果您将代码移动到另一个模块,但从未导入它,则Python不知道其内容。

    # project/src/__init__.py
    import project.src.base      # executes the ``BaseClass`` definition
    import project.src.subclass  # executes the ``SubClass`` definition
    

    请注意,在哪里导入这些并不重要-它们必须在需要之前导入 SubClass 出现在 __subclasses__