访问类实例的父模块的__all__列表

时间:2015-05-09 12:02:26

标签: python class python-2.7 module namespaces

我有一个类SomeClass的实例,它在模块m中定义。对于SomeClass的行为,我需要访问以下列表:

m.__all__

如何从SomeClass

的实例访问此列表

SomeClass的实例具有以下内置:

SomeClass.__module__ 

但是,这只是一个字符串。如何访问模块本身及其属性?

1 个答案:

答案 0 :(得分:4)

sys模块包含一个字典modules,它将已加载模块的名称映射到模块本身。与SomeClass.__module__一起,您可以使用它来访问从中导入的模块SomeClass

例如,使用这样的模块m.py

# m.py

__all__ = [
    "A_CONSTANT",
    "SomeClass",
]

A_CONSTANT = "foo"

class SomeClass: pass

......以下作品:

>>> from m import SomeClass
>>> SomeClass.__module__
'm'
>>> import sys
>>> sys.modules[SomeClass.__module__]
<module 'm' from '/path/to/m.py'>
>>> sys.modules[SomeClass.__module__].__all__
['SomeClass', 'A_CONSTANT']
>>> sys.modules[SomeClass.__module__].A_CONSTANT
'foo'