【发布时间】:2013-05-28 12:46:41
【问题描述】:
一般情况:
- 我不知道我将事先检查哪些模块,我不知道其中会包含什么:类、方法等。
- 我确实知道我正在寻找什么课程,以及我需要用它做什么。例如我需要运行一个特定的方法,cls.register
- 我需要找到最有效的方法来做到这一点。
我什至没有得到具体的代码,或者我会发布它。不过我想我有一些选择:
- 只需通过
try/except运行模块中的所有内容 -
if/else求我需要的方法 - 使用检查来查找模块中类的完全匹配
- 使用元类添加属性
this_is_class_sought=True
1-3 好像太粗略了,4 好像太费劲了。
我的情况:
我尝试将 Flask-Classy 与 an application creator/factory 集成。
我有一堆视图文件,我不知道这些文件中会有什么。我需要找到所有继承 FlaskView 的类,而不是 FlaskView 本身,然后运行类注册函数。
因此,例如来自dir(a_module) 的随机遇到的模块:
['FlaskView', 'AView', '__builtins__', '__doc__', '__file__', '__name__', '__package__', 'forms', 'models', 'redirect', 'render_template', 'request', 'url_for']
我需要确定AView 存在,然后运行注册方法。 3,上面似乎有可能,但我还没有完全确定如何区分AView。
最好的方法是什么?
编辑:
我必须强调,重点是我不知道我将查看哪些模块,或者它们将包含什么。我需要有效地提取我需要的信息并根据这些信息采取行动。
EDIT2:
__subclasses__() 大大简化了我的目的。
【问题讨论】:
-
执行此操作的正常方法是将所有这些类显式导入主模块。与编写一些在运行时为您执行此操作的魔术代码相比,让所有这些导入语句保持最新所需的工作量更少。
-
有一点我可能没有强调:我不知道我会得到什么模块或视图。我知道明确导入模块会更容易,但我不会事先知道我将使用哪些模块,它们将包含哪些视图,或者它们将包含多少个视图。
标签: python flask flask-extensions