# test1.py
class DatabaseEngine(object):
pass
# test2.py
from test1 import DatabaseEngine
class OracleEngine(DatabaseEngine):
pass
# test3.py
from test1 import DatabaseEngine
class MysqlEngine(DatabaseEngine):
pass
# test4.py
# try 1
from test1 import DatabaseEngine
print DatabaseEngine.__subclasses__() # returns empty list
# try 2
from test2 import DatabaseEngine
from test3 import DatabaseEngine
print DatabaseEngine.__subclasses__() # returns [oracle, mysql]
为什么#try1无法识别子类,但#try 2识别其子类。
我想在test4.py中使用__ subclasses()__而不做
from test2 import DatabaseEngine
from test3 import DatabaseEngine
有办法吗?
答案 0 :(得分:0)
尝试1不工作b / c导入显式评估该模块中的代码。您不会在try 1中导入包含子类的模块,因此不会对它们进行评估。
如果您选择将子类保留在不同的模块中并希望全部访问它们,那么必须至少有一个模块可以将它们全部导入。
我建议创建另一个包含子类实现的文件,然后将其导入,然后在需要子类时导入这个文件。