当前位置: 首页 > news >正文

python类的内置属性

在 Python 中,类(以及类的实例)具有一些内置属性(也称为“特殊属性”或“魔法属性”),它们由 Python 解释器自动提供,用于获取类的元信息或控制类的行为。这些属性通常以双下划线 __ 开头和结尾(部分属性如 __dict____module__ 等例外)。

以下是 Python 类中常见的内置属性及其功能说明:

1. __dict__

  • 作用:存储类或实例的属性字典(可读写)。
  • 说明
    • 类的 __dict__ 存储类属性和方法。
    • 实例的 __dict__ 存储实例属性。
  • 示例
    class MyClass:class_attr = "I am a class attribute"  #类属性def __init__(self, value):self.instance_attr = value  #实例的属性
    obj = MyClass(42)
    print(MyClass.__dict__)  # 包含类属性和方法
    print(obj.__dict__)      # 包含实例属性
    #没有self的是类属性,有self的实例属性
    

2. __module__

  • 作用:返回类定义所在的模块名。
  • 示例
    # 文件: my_module.py
    class MyClass:pass
    # 在其他文件中导入
    from my_module import MyClass
    print(MyClass.__module__)  # 输出: 'my_module'
    

3. __name__

  • 作用:返回类的名称(字符串形式)。
  • 示例
    class MyClass:pass
    print(MyClass.__name__)  # 输出: 'MyClass'
    

4. __bases__

  • 作用:返回类的直接父类组成的元组(按继承顺序)。
  • 示例
    class Parent1: pass
    class Parent2: pass
    class Child(Parent1, Parent2): pass
    print(Child.__bases__)  # 输出: (<class '__main__.Parent1'>, <class '__main__.Parent2'>)
    

5. __doc__

文档字符串(docstring)是 Python 中一种特殊的字符串,用来描述模块、类、函数或方法的用途和行为。它必须符合以下两个条件:
位置:必须是定义体(类、函数、模块)的第一个语句。
格式:必须是三引号字符串(单引号或双引号均可,但推荐双引号 “”")。

  • 作用:返回类的文档字符串(docstring),如果没有定义则为 None
  • 示例
    class MyClass:"""This is a class docstring."""pass
    print(MyClass.__doc__)  # 输出: 'This is a class docstring.'
    

6. __annotations__

  • 作用:返回类中变量和方法的类型注解字典(Python 3.6+)。
  • 示例
    class MyClass:x: inty: str = "hello"def method(self, a: float) -> bool:return True
    print(MyClass.__annotations__)
    # 输出: {'x': <class 'int'>, 'y': <class 'str'>}
    

7. __class__

  • 作用:返回实例所属的类(或类自身的类型,即 type)。
  • 示例
    class MyClass: pass
    obj = MyClass()
    print(obj.__class__)  # 输出: <class '__main__.MyClass'>
    print(MyClass.__class__)  # 输出: <class 'type'>
    

8. __subclasses__()

  • 作用:返回类的所有直接子类列表(注意:这是方法而非属性)。
  • 示例
    class Parent: pass
    class Child1(Parent): pass
    class Child2(Parent): pass
    print(Parent.__subclasses__())  # 输出: [<class '__main__.Child1'>, <class '__main__.Child2'>]
    

9. __mro__

  • 作用:返回类的**方法解析顺序(Method Resolution Order, MRO)**元组,用于多重继承时确定方法调用顺序。
  • 示例
    class A: pass
    class B(A): pass
    class C(A): pass
    class D(B, C): pass
    print(D.__mro__)
    # 输出: (<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)
    

10. __qualname__

  • 作用:返回类的限定名称(包含嵌套类的路径)。
  • 示例
    class Outer:class Inner:pass
    print(Outer.Inner.__qualname__)  # 输出: 'Outer.Inner'
    

总结表

属性/方法作用
__dict__类或实例的属性字典
__module__类定义所在的模块名
__name__类的名称
__bases__直接父类元组
__doc__类的文档字符串
__annotations__类型注解字典
__class__实例所属的类(或类的类型)
__subclasses__()返回所有直接子类(方法)
__mro__方法解析顺序(MRO)元组
__qualname__类的限定名称(包含嵌套路径)

注意事项

  1. 可读性 vs 修改性
    • 大部分内置属性(如 __name____bases__)是只读的,但 __dict____annotations__ 可以动态修改。
  2. 与特殊方法的区别
    • 内置属性(如 __name__)存储元信息,而特殊方法(如 __init____str__)定义类的行为。
  3. 动态性
    • Python 的类和对象是动态的,可以通过 __dict__setattr/getattr 动态操作属性。
      如果你需要更深入地了解某个属性的使用场景或底层实现,可以继续提问!
http://www.xdnf.cn/news/1448641.html

相关文章:

  • AI重塑SaaS:从被动工具到智能角色的技术演进路径
  • 【面试题】OOV(未登录词)问题如何解决?
  • Leetcode_202.快乐数_三种方法解决(普通方法解决,哈希表解决,循环链表的性质解决_快慢指针)
  • 简述:普瑞时空数据建库软件(国土变更建库)之一(变更预检查部分规则)
  • PyTorch 中训练语言模型过程
  • 利用 Java 爬虫获取淘宝商品详情 API 接口
  • 嵌入式学习day41-硬件(2)
  • ansible总结2
  • 代码随想录算法训练营第一天 | 704.二分查找 27. 移除元素 977.有序数组的平方
  • python中`__annotations__` 和 `inspect` 模块区别??
  • 两个子进程之间使用命名pipe
  • 从月薪5K到年薪60W!API自动化测试如何让你突破职业瓶颈
  • K8S 部署 NFS Dynamic Provisioning(动态存储供应)
  • 【STM32】STM32F103系列USB大坑 二
  • 具身智能让人形机器人 “活” 起来:懂语言、能感知、会行动,智能进化再提速
  • 使用langgraph创建工作流系列4:人机回环
  • 面试复习题-Flutter
  • 论文介绍:“DUSt3R”,让 3D 视觉从“繁琐”走向“直观”
  • Swift 解法详解:LeetCode 370《区间加法》
  • 《网络安全实战:CC攻击(应用层)与DDoS攻击(网络层)的底层逻辑与防御体系》​
  • 分发饼干——很好的解释模板
  • 从“看见”到“行动”:一场机器视觉与机器人的软硬件共舞
  • 把本地win11系统打包成镜像并安装到vmware中
  • Springboot3+SpringSecurity6Oauth2+vue3前后端分离认证授权-授权服务
  • FastVLM:高效视觉编码助力视觉语言模型突破高分辨率效率瓶颈
  • LeNet-5:卷积神经网络的奠基之作
  • 0903 C++类的运算符重载、静态成员与继承
  • 前端-安装VueCLI
  • 【ARM嵌入式汇编基础】-数据处理指令(三)
  • OpenHarmony Ability“全家桶”彻底拆解:从UIAbility到ExtensionAbility一文说清楚