__subclasses __()使用多个py文件时的用法

时间:2017-06-20 00:48:07

标签: python

# 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

有办法吗?

1 个答案:

答案 0 :(得分:0)

尝试1不工作b / c导入显式评估该模块中的代码。您不会在try 1中导入包含子类的模块,因此不会对它们进行评估。

如果您选择将子类保留在不同的模块中并希望全部访问它们,那么必须至少有一个模块可以将它们全部导入。

我建议创建另一个包含子类实现的文件,然后将其导入,然后在需要子类时导入这个文件。