Python 中的内置属性(也称为魔术属性或双下划线属性)是以双下划线 __开头和结尾的特殊属性,它们提供了对象或类的元信息或底层行为控制。以下是一些常见的 Python 内置属性及其作用:
1. 常用内置属性
| 属性 | 说明 | 示例 |
|---|---|---|
**__doc__** |
对象的文档字符串(docstring),即类/函数/模块定义时的第一段字符串说明 | print(str.__doc__)查看字符串类的文档 |
**__module__** |
定义对象的模块名(如 __main__或导入的模块名) |
print(int.__module__)输出 'builtins' |
**__class__** |
对象所属的类(返回类对象本身) | num = 10; print(num.__class__)输出 <class 'int'> |
**__dict__** |
对象或类的属性字典(存储可写属性) | class A: pass; a = A(); a.x=1; print(a.__dict__)输出 {'x': 1} |
**__name__** |
模块/类/函数的名称(模块中为 '__main__'或模块名) |
print(__name__)在模块中输出 '__main__' |
**__bases__** |
类的父类元组(继承关系) | print(int.__bases__)输出 (<class 'object'>,) |
**__qualname__** |
类/函数的限定名称(包含嵌套路径) | 嵌套类中更清晰显示层级关系 |
**__file__** |
模块对应的文件路径(仅在模块中有效) | print(__file__)输出当前脚本路径 |
**__annotations__** |
函数或类的类型注解(Python 3+) | def f(x: int): pass; print(f.__annotations__) |
2. 特殊方法(相关内置属性)
虽然不是严格意义上的属性,但以下双下划线方法也常被归类为"内置特性":
-
__init__:构造函数(初始化对象) -
__str__ /__repr__:定义对象的字符串表示(print(obj)或直接输入obj时调用) -
__len__:定义len(obj)的行为 -
__call__:使对象可像函数一样调用(obj())
3. 示例代码
python
class Person:
"""这是一个Person类"""
def __init__(self, name):
self.name = name
p = Person("Alice")
# 常用内置属性示例
print(Person.__doc__) # 输出类的文档字符串
print(Person.__module__) # 输出定义模块(通常是 '__main__')
print(p.__class__) # 输出对象所属类:<class '__main__.Person'>
print(p.__dict__) # 输出对象的属性字典:{'name': 'Alice'}
print(int.__bases__) # 输出int的父类:(<class 'object'>,)
4. 注意事项
-
不要随意修改内置属性 (如
__class__或__dict__),可能导致意外行为。 -
**
__slots__** 是一个特殊属性,用于优化内存并限制对象的属性(需显式定义)。 -
更多内置属性可通过官方文档或
dir(obj)查看对象的所有可用属性和方法。