讲师中心 微信公众号

工具推荐

视频效率加速
Seko
Seko

AI短剧一键生成成片

Laper
Laper

剧本策划到成片协作

AniShort
AniShort

AI短剧协同制作平台

updream

一键生成高质量推广成片

Python对象属性查找顺序_访问规则说明【指导】

浅静同学_1444

浅静同学_1444

发布时间:2026-01-06 18:49:13

|

367人浏览过

|

来源于php中文网

原创

Python属性查找顺序为:先实例字典→再按MRO遍历类字典→描述符协议介入→特殊方法绕过常规流程。实例属性遮蔽类属性;MRO决定多重继承中同名属性优先级;描述符(如@property)可定制访问逻辑;特殊方法需在类中定义。

python对象属性查找顺序_访问规则说明【指导】

Python中对象属性查找遵循明确的顺序规则,核心是MRO(Method Resolution Order)和描述符协议共同作用的结果。理解这个顺序,能避免属性访问异常、正确覆盖父类行为,并写出更可靠的面向对象代码。

实例字典优先于类字典

访问对象属性时,Python首先在实例的__dict__中查找。如果找到,直接返回值,不再继续搜索。这解释了为什么给实例动态赋值同名属性会“遮蔽”类属性或父类方法。

  • 例如:obj.x = 10后,obj.x始终返回10,即使类中定义了x = 20或父类有x方法
  • 删除实例属性:del obj.x后,再次访问obj.x将按后续规则继续查找

按MRO顺序遍历类及其父类

实例字典未命中时,Python按该对象所属类的MRO序列(从左到右、深度优先但C3线性化)依次在每个类的__dict__中查找。MRO可通过ClassName.__mro__或ClassName.mro()查看。

Python Hardener
Python Hardener

通过完整的安全审查、代码整洁重构、健壮的错误处理、正确的日志记录以及完整的文档字符串覆盖,强化 Python 脚本。

下载
  • 多重继承下,MRO确保每个父类只被搜索一次,且子类总在父类之前
  • 若多个父类定义同名属性,靠前的类中定义的版本生效(非“最近父类”,而是MRO中位置最前)
  • 注意:类变量和实例方法都走此路径;但方法调用会额外触发绑定(bound method)机制

描述符协议介入属性访问

当在类字典中查到一个对象,且该对象实现了__get__(以及可选__set__/__delete__),它就是一个描述符。此时Python不直接返回该对象,而是调用其__get__(instance, owner)方法——这意味着属性行为可被完全定制。

立即学习“Python免费学习笔记(深入)”;

  • 函数、property、classmethod、staticmethod 都是内置描述符
  • @property修饰的方法本质是data descriptor(有__set__),优先级高于实例字典中的同名属性
  • 非数据描述符(只定义__get__)优先级低于实例字典,但高于普通类属性

特殊方法名绕过常规查找

以双下划线开头和结尾的特殊方法(如__len__、__add__)不完全遵循上述顺序。Python在特定操作(如len(obj))中,会直接在对象的类(而非实例)中查找,且不触发描述符协议(即不会调用__get__)。

  • 因此,在实例上设置obj.__len__ = lambda: 42对len(obj)无效
  • 重载运算符必须在类定义中实现,不能靠实例赋值覆盖
  • 例外:__getattr__仅在常规查找全部失败后才被调用,用于兜底处理;而__getattribute__则拦截所有属性访问(慎用)

热门AI工具

更多
讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Flowith
Flowith Hot

Flowith是一款基于画布和智能体工作流的 AI 协作工作空间。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6344

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3444

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

1912

2025.10.17

go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

7615

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

362

2025.11.27

C++ 面向对象编程与设计模式实践
C++ 面向对象编程与设计模式实践

本专题整合了 C++ 面向对象编程的核心机制,涵盖类的定义与访问控制、构造函数与析构函数、拷贝语义与移动语义、继承与虚函数多态、抽象类与接口、运算符重载、友元函数等关键知识点,同时结合单例模式、工厂模式、观察者模式、策略模式等常用设计模式的 C++ 实现,帮助开发者写出结构清晰、易于维护的面向对象代码。

384

2026.04.09

Java 面向对象与核心编程机制
Java 面向对象与核心编程机制

系统讲解 Java 面向对象编程的核心知识体系,涵盖类的定义与封装、构造方法与 this/super 关键字、继承与方法重写、多态与向上向下转型、抽象类与接口的区别与设计原则、异常处理机制(try-catch-finally / 自定义异常)、泛型的类型参数与通配符、集合框架(List/Set/Map)的使用与遍历方式,帮助开发者全面掌握 Java 程序设计的核心机制与面向对象思维。

263

2026.04.17

go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

7615

2025.09.05

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

60

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn