列出来自不同文件的子类

时间:2015-09-01 15:51:34

标签: python module subclass

让我们考虑一个应用程序,其中我有一个基类Move及其变体Walk和Run。我想将它们分成不同的类。我还希望能够从基类中获取可能的移动列表。类似的东西:

第1单元:

class Move(object): pass

第2单元:

from module1 import Move
class Walk(Move): pass

主要剧本:

from module1 import *
from module2 import *
print Move.__subclasses__()

如果没有这两个导入行, main 将不返回任何子类。这似乎是一种预期的行为。

我希望将来能够添加更多的移动模块,而无需修改现有的源代码。

我正在考虑发现和导入给定目录中的所有python文件,类似于此处所做的:Python __subclasses__() not listing subclasses

这种任务有更简洁的方法吗?

1 个答案:

答案 0 :(得分:3)

没有导入子类,python无法知道它们。

我们在一个项目中使用的解决方案最终完成了您的要求,即使用entry_points。然后加载通过入口点定义的类。

入口点定义:

module.movements = 
    Swim = othe_module:Swim
    Run  = other_module:Run

加载入口点:

def load_registred_entry_points(group):
    for ep in pkg_resources.iter_entry_points(group=group):
        ep.load()

load_registred_entry_points('module.movements')

当然,您必须在致电load_registred_entry_points之前致电Move.__subclasses__()