【发布时间】:2015-09-01 15:51:33
【问题描述】:
让我们考虑一个应用程序,其中我有一个基类 Move 及其变体 Walk and 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
这样的任务有更清洁的方法吗?
【问题讨论】:
-
一个反问句:假设我来了,看看你的 Move 类,fork 你的代码和子类 Move(我们称之为子类 Swim)。您的
Move.__subclasses__()了解 Swim 是否有意义? -
我们今天没有要求为运动提供多层次的继承。该软件的开发人员指南将声明所有运动类都必须从 Move 继承。
将来,如果我们发现需要额外的层(移动->游泳->(蝴蝶,蛙泳),我们计划建立一个类似于stackoverflow.com/questions/3862310/…的递归子类搜索,现在我正在重新考虑所有这样,循环遍历所有模块将是相同的。 -
事实上,我不确定我是否很好地理解了您的示例。是的,任何特定的动作都对 Move 有意义。