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

Accessing the __all__ list of the parent module of a class instance

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

m.__all__

如何从 SomeClass 的实例访问此列表?

SomeClass 的实例具有以下内置:

SomeClass.__module__ 

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

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'