Wil*_*ill 10 python introspection
我有一个动态导入子包的模块; 我如何迭代它包含的类?
我一直在导入模块并列出如下名称:
package = current_module.__name__
package = package[:package.rindex(".")] # get the package
package = "%s.sub.%s"%(package,name) # make the name of the child
print "(loading package %s)"%package
module = __import__(package) # this succeeds
for name,obj in inspect.getmembers(module):
print name,type(obj)
Run Code Online (Sandbox Code Playgroud)
这仅打印模块属性,而不是模块定义的类类型:
__builtins__ <type 'dict'>
__doc__ <type 'NoneType'>
__file__ <type 'str'>
__name__ <type 'str'>
__package__ <type 'NoneType'>
__path__ <type 'list'>
imported_package <type 'module'>
Run Code Online (Sandbox Code Playgroud)
UPDATE
看来,我的课不是在__dict__ 除非在fromlist非空!但是,from-list中的值似乎没有得到验证; [""]似乎工作得很好,突然出现了课程!
谁能解释为什么会这样?
(标准的ubuntu python 2.7.1+(r271:86832)
pvo*_*ten 31
示例:创建将名称映射到类的dict:
dict([(name, cls) for name, cls in mod.__dict__.items() if isinstance(cls, type)])
Run Code Online (Sandbox Code Playgroud)
其中mod是加载的模块
如果您__all__在要导入的模块中定义了要导出的符号,则可以通过专门选择这些项目来进行迭代。
map(module.__dict__.get, module.__all__)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13662 次 |
| 最近记录: |