Python知识点——内置属性

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. 注意事项

  1. 不要随意修改内置属性 (如 __class____dict__),可能导致意外行为。

  2. **__slots__**​ 是一个特殊属性,用于优化内存并限制对象的属性(需显式定义)。

  3. 更多内置属性可通过官方文档或 dir(obj)查看对象的所有可用属性和方法。