在Python中,每个模块都是一个对象,并且这个对象有一个__dict__
属性。__dict__
属性是一个字典,用于存储模块中定义的所有属性(包括函数、类、变量等)。这些属性可以通过点(.
)运算符来访问,但在内部,它们实际上是存储在__dict__
字典中的。
这里有一个简单的例子来说明这一点:
假设我们有一个名为my_module.py
的模块,内容如下:
# my_module.py
def my_function():
return "Hello from my_function!"
class MyClass:
def __init__(self):
self.value = "Hello from MyClass!"
my_variable = "Hello from my_variable!"
现在,如果我们从另一个脚本导入这个模块,并打印其__dict__
属性,我们会看到:
import my_module
print(my_module.__dict__)
输出可能类似于(注意:输出可能会根据Python的版本和具体实现有所不同):
{
'__name__': 'my_module',
'__doc__': None,
'__package__': None,
'__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x...>,
'__spec__': ModuleSpec(name='my_module', loader=<_frozen_importlib_external.SourceFileLoader object at 0x...>, origin='/path/to/my_module.py', submodule_search_locations=None),
'__annotations__': {
},
'__builtins__': <module 'builtins' (built-in)>,
'__file__': '/path/to/my_module.py',
'__cached__': None,
'my_function': <function my_function at 0x...>,
'MyClass': <class 'my_module.MyClass'>,
'my_variable': 'Hello from my_variable!'
}
你可以看到,my_function
、MyClass
和my_variable
都作为键存储在__dict__
字典中。
需要注意的是,__dict__
还包含了一些由Python自动添加的特殊属性(如__name__
、__file__
等),这些属性提供了关于模块本身的元信息。