Python 列出不同文件中的子类 让我们考虑一个应用程序,在这个应用程序中,我有一个基类移动,并且它的变体会运行和运行。我想把他们分成不同的班级。我还希望能够从基类获得一个可能的移动列表。比如:

Python 列出不同文件中的子类 让我们考虑一个应用程序,在这个应用程序中,我有一个基类移动,并且它的变体会运行和运行。我想把他们分成不同的班级。我还希望能够从基类获得一个可能的移动列表。比如:,python,module,subclass,Python,Module,Subclass,单元1: class Move(object): pass 单元2: from module1 import Move class Walk(Move): pass 主脚本: from module1 import * from module2 import * print Move.__subclasses__() 如果没有这两个导入行,main将不会返回任何子类。这似乎是意料之中的行为 我希望能够添加更多的运动模块在未来,而不修改现有的源代码 我正在考虑查找和导入给定目录中的所有pyt

单元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无法了解它们

我们在一个项目中使用的解决方案最终实现了您所要求的用途。然后加载通过入口点定义的类

入口点定义:

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')

当然,在调用
Move之前,您必须调用
load\u registed\u entry\u points
。\uu子类\uu()

一个反问:假设我来了,看到您的Move类,叉出代码和子类Move(让我们称该子类为Swim)。你的
移动有什么意义吗?\uuu子类\uuuu()
了解游泳?我们今天的要求不是对移动有多个层次的继承。软件的开发者指南将说明所有的移动类都必须从Move继承
在未来,如果我们认为需要额外的图层(移动->游泳->(蝶泳、蛙泳),我们计划建立一个递归子类搜索,类似于现在,我正在重新思考所有这一切,所有模块的循环都将是相同的。事实上,我不确定我是否很好地理解了你的示例。是的,任何特定的移动对移动都有意义。