我正在实现一个从适当的子类返回对象的函数。如果我将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
答案 0 :(得分:3)
Python仅运行导入的模块的代码。如果将代码移至其他模块但从不导入,则Python不会知道其内容。
您必须导入包含要访问的子类的文件。
# project/src/__init__.py
import project.src.base # executes the ``BaseClass`` definition
import project.src.subclass # executes the ``SubClass`` definition
请注意,将它们导入哪里并不重要-不过,必须先导入它们,然后才能使SubClass
出现在__subclasses__
中。