<span class=“js_title_inner“>Python:实例对象</span> 📅 发布时间:2026/7/15 15:59:13 👁️ 浏览次数: 在 Python 中实例对象instance并不是类的附属产物而是与类对象并列的一等运行期实体。实例与类一样都是在程序执行过程中被创建的对象具备明确的身份、类型和值并完全受统一的对象模型规则约束。理解实例对象的创建机制、结构形态以及与类对象之间的协作关系是正确理解属性访问、方法调用、状态管理及面向对象语义的基础。一、实例对象的创建过程在 Python 中实例并不是由语法结构直接生成的而是在运行时通过对类对象的调用而产生。当执行如下代码时class Contact: def __init__(self, name, phone): self.name name self.phone phone def display(self): return f{self.name}: {self.phone} c Contact(艾婉婷, 13800138001)解释器会按顺序完成一组明确的运行期步骤。1调用类对象触发实例创建过程表达式Contact(艾婉婷, 13800138001)这里的 Contact() 并不是函数调用而是对类对象可调用行为的触发。从对象模型角度看该表达式等价于进入由 type 控制的实例构造流程Contact.__call__(...)__call__ 的默认实现由元类 type 提供并负责调度 __new__ 与 __init__。2调用 __new__构造实例对象在 type.__call__ 的内部流程中首先会调用类的 __new__ 方法一般不需用户自定义obj Contact.__new__(Contact)此步骤完成• 分配内存并创建一个新的实例对象• 将实例与其类型对象类建立关联• 为实例准备其状态承载结构对于未定义 __slots__ 的普通类实例的 __dict__ 也在此阶段一并创建。此时实例已经在对象模型意义上成立具备• 独立的身份identity• 明确的类型type但尚未包含任何用户定义的状态数据。3调用 __init__写入实例初始状态在实例对象成功创建后解释器会自动调用类中定义的 __init__ 方法Contact.__init__(obj, 艾婉婷, 13800138001)这里需要强调的是__init__ 并不创建实例它操作的是一个已经存在的实例对象def __init__(self, name, phone): self.name name self.phone phone此时传入的 self 指向刚刚创建的实例对象。对 self.name、self.phone 的绑定操作本质上是向实例已有的状态容器通常是 __dict__中写入条目。4名称绑定建立引用关系当实例构造与初始化完成后表达式的求值结果会被绑定到目标名称上c Contact(艾婉婷, 13800138001)这里的 c 只是当前作用域中的一个名称用于引用该实例对象。名称绑定属于作用域与名字解析机制与实例对象自身的结构和行为相互独立。至此一个实例对象从构造到可用全部过程均发生在运行期且每一步都遵循统一的对象模型规则。二、实例对象的本质从对象模型的角度看实例对象与其他对象并无本质差异同样具备对象的三要素• 身份identity实例在运行期间的唯一标识• 类型type实例所属的类对象• 值value实例当前所承载的状态数据c Contact(艾婉婷, 13800138001) print(isinstance(c, object)) # Trueprint(type(c)) # class __main__.Contact这意味着实例对象• 可以被绑定到名称• 可以作为函数的参数或返回值• 可以在运行时被检查和修改实例并不是类对象中的“内部数据”而是独立存在的运行期实体。三、实例属性与实例字典1、实例字典的角色在未引入 __slots__ 等约束的情况下大多数实例对象都拥有独立的实例字典print(c.__dict__)# {name: 艾婉婷, phone: 13800138001}实例字典用于存储• 实例特有的状态数据• 运行时动态添加的实例属性c.email testexample.comprint(c.__dict__)# {name: 艾婉婷, phone: 13800138001, email: testexample.com}2、实例属性的写入语义当执行c.name 张三Python 的行为是始终向实例自身写入属性不会修改类对象中的同名属性。实例属性在语义上始终优先于类属性。四、实例视角下的属性查找机制当通过实例访问属性或方法时例如c.display()解释器的查找顺序为1在实例对象的 __dict__ 中查找2在实例所属类的 __dict__ 中查找3沿着类的 MRO 向上查找父类4若仍未找到抛出 AttributeError这一过程由对象模型的属性访问入口 __getattribute__ 统一驱动而不是由实例或类“各自决定”。示例class A: x 10 class B(A): pass b B()b.x 20查找顺序结果为• b.__dict__[x] → 20• A.x 被遮蔽但未被修改五、方法访问与绑定行为在 Python 中方法method并不是一种独立存储于实例中的对象而是函数对象在特定访问路径下产生的绑定结果。1、方法来源于类属性类体中通过 def 定义的成员本质上是函数对象存储于类对象的命名空间中class Contact: ... def display(self): return f{self.name}: {self.phone}此时display 属于 Contact.__dict__而不属于任何实例的 __dict__。实例并不持有方法本身。2、实例访问触发绑定行为当通过实例访问类中定义的函数属性时c Contact(艾婉婷, 13800138001)m c.display属性解析首先在类对象中取得函数对象 display。在属性访问返回阶段解释器会构造一个新的绑定方法对象bound method。该对象同时持有• 原始函数对象作为可调用逻辑• 当前实例对象作为隐式绑定的第一个参数因此m 并不是类中存储的原始函数而是一个临时生成的、与实例关联的方法对象。当调用该方法时m()等价于Contact.display(c)需要强调的是• 绑定方法对象是在属性访问阶段创建的• 该对象并不写入实例的 __dict__• 每次通过实例访问都会生成新的绑定方法对象3、类访问不会发生绑定当通过类对象访问方法属性时Contact.display得到的是类对象中存储的原始函数对象不会发生任何与实例相关的绑定行为。因此如果直接调用Contact.display()将导致错误TypeError: display() missing 1 required positional argument: self原因在于 display 在定义时就约定了第一个参数用于接收实例对象而通过类访问时解释器不会主动替你提供这个参数。六、实例与类的协作关系在 Python 的对象模型中实例对象与类对象通过清晰的职责分工协作完成面向对象语义。• 类对象提供行为定义与结构规范• 实例对象承载运行期状态并参与行为执行1、行为共享状态独立类中定义的方法不会被复制到实例中。多个实例共享同一份行为定义各自维护独立状态。例如创建两个实例c1 Contact(艾婉婷, 13800138001)c2 Contact(张三, 13900000002)此时c1.display 与 c2.display 并不存储在各自的实例字典中display 的函数定义只存在于 Contact.__dict__ 中。两个实例在调用该方法时共享同一份行为定义而它们的状态则完全独立print(c1.__dict__) # {name: 艾婉婷, phone: 13800138001}print(c2.__dict__) # {name: 张三, phone: 13900000002}这体现了 Python 对象模型中“行为共享、状态分离”的基本原则。2、实例作为行为执行的参与者如前所述c1.display()在语义上等价于Contact.display(c1)方法体中对 self 的访问实质上是对当前实例状态的访问。3、实例的运行期扩展能力实例对象本身也是普通对象其结构在运行期并非不可变。在未引入额外约束的情况下可以在运行期为实例单独添加属性c1.email testexample.comprint(c1.email) # testexample.com该属性仅存在于 c1 的实例字典中print(c1.__dict__)# {name: 艾婉婷, phone: 13800138001, email: testexample.com}而另一个实例不受影响print(hasattr(c2, email)) # False同样也可以为单个实例注入新的可调用行为def greet(self): return fHello, {self.name} c1.greet greet.__get__(c1, Contact)print(c1.greet()) # Hello, 艾婉婷此行为是仅属于该实例的行为不会影响类对象及其他实例。 小结实例对象是 Python 对象模型中的基本运行期实体。实例通过类获取行为定义通过自身结构承载状态数据。实例不是类的拷贝也不是类的附属结构而是与类对象协作完成面向对象语义的核心参与者。理解实例对象是深入理解 Python 面向对象机制、动态行为以及元编程能力的基础前提。“点赞有美意赞赏是鼓励”
<span class=“js_title_inner“>北大医院肾内科发布IgA肾病激素疗效关键遗传位点 为精准用药提供新思路</span> 近日,北京大学第一医院肾内科张宏教授、周绪杰教授团队在IgA肾病糖皮质激素治疗领域取得重要突破,发现位于CDA基因内的遗传变异位点rs477155,可作为预测患者激素治疗反应的重要生物学标志物,研究成果发表于《美国肾脏病学会杂志》… 2026/7/11 11:19:57
YOLO26优化:最新注意力机制 | 低计算复杂度的 多尺度线性注意力机制(MSLA) 💡💡💡问题点:基于CNN的方法由于卷积操作的固有局限性,难以有效捕捉全局上下文信息;而基于Transformer的方法则存在局部特征建模不足的问题,同时面临自注意力机制带来的高计算复杂度挑战。 💡💡💡引入多尺度线性注意力机制,旨在以低计算复杂度高效提取图像中的… 2026/7/12 14:11:06
金手指PCB结构原理与失效机理深度解析 在终端产品返修与失效分析案例中,金手指 PCB 的故障占比常年居高不下,很多用户只关注插拔与清洁,却忽略其结构本质与失效根源。金手指 PCB 是各类接口类电路板的核心形态,广泛应用于内存条、显卡、PCIe 扩展卡、工业控制板、车载… 2026/7/13 1:43:38
TectonicDB实战案例:构建高频交易数据管道的完整方案 TectonicDB实战案例:构建高频交易数据管道的完整方案 【免费下载链接】tectonicdb Database for L2 orderbook 项目地址: https://gitcode.com/gh_mirrors/te/tectonicdb TectonicDB作为专为L2订单簿设计的高性能数据库,为高频交易场景提供了高效… 2026/7/15 15:53:53
Unity网格简化实战指南:从原理到性能优化 1. 项目概述:为什么你的Unity项目需要网格简化?如果你正在开发一个Unity项目,尤其是面向移动端、WebGL或者包含大量复杂模型的场景,那么“性能”这个词一定是你绕不开的坎。你可能遇到过这样的场景:场景里摆了几个从资… 2026/7/15 15:53:53
长沙市芙蓉区湖南农业大学芷兰学生公寓B栋设计 前言 第一章 设计任务及基本要求 1.1 设计原始资料 1.2 建筑设计要求 1.3结构设计任务及要求 第二章 建筑设计说明 2.1建筑平面设计 2.2剖面设计 第三章 结构设计 3.1 结构方案的选择及结构布置 第四章 侧移线刚度计算 第五章 恒荷载作用下内力计算 5.… 2026/7/15 15:51:52
CANN/asc-devkit掩码更新函数 asc_update_mask 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcod… 2026/7/15 15:47:50
5分钟搞定Windows免安装Postman便携版:终极绿色软件指南 5分钟搞定Windows免安装Postman便携版:终极绿色软件指南 【免费下载链接】postman-portable 🚀 Postman portable for Windows 项目地址: https://gitcode.com/gh_mirrors/po/postman-portable 还在为每次重装系统都要重新安装Postman而烦恼吗&am… 2026/7/15 15:45:40
为什么你的ChatGPT邮件总显得“假”?——揭秘人类信任度评分模型下的7层语义校准法 更多请点击: https://codechina.net 第一章:为什么你的ChatGPT邮件总显得“假”?——人类信任度评分模型的底层悖论 当一封由大语言模型生成的商务邮件被收件人扫视三秒后直接归入“营销垃圾”或“AI痕迹明显”类别,问题往往不在… 2026/7/15 15:43:40
行星减速机的工作原理是什么?从齿轮运动关系到减速比计算 一、行星齿轮机构的组成 标准行星齿轮机构主要包括: 太阳轮; 行星轮; 内齿圈; 行星架。 太阳轮位于机构中心。 多个行星轮围绕太阳轮均匀布置,行星轮内侧与太阳轮外啮合,外侧与内齿圈内啮合。 行星轮通过轴… 2026/7/15 0:03:00
阅读Java开源框架源码的心得分享! 前几日闲来无事有幸看到了一位博主分享自己阅读开源框架源码的心得,看了之后也引发了我的一些深度思考。我们为什么要看源码?我们该怎么样去看源码? 其中前者那位博主描述的我觉得很全了(如下图所示),就不做… 2026/7/15 0:03:00
【LINUX】驱动 【LINUX驱动】【字符设备】【中断】【Platform】【网课 设备树】【GPIO】【PINCTRL】【INPUT】【IIC】【SPI】【网络驱动】【屏幕驱动】【一 设备树】【二 内核模块编译】【三 基本驱动框架】【四 Platform总线设备驱动框架】【五 驱动子系统】【六 综合】 2026/7/15 0:07:01
Git reset 与 revert 深度对比:5个关键差异与 3 种典型应用场景 Git Reset 与 Revert 深度对比:5个关键差异与3种典型应用场景在团队协作开发中,代码版本管理如同行走钢丝——一步失误可能导致整个项目陷入混乱。作为Git进阶用户,你是否曾在深夜面对错误的提交束手无策?是否在强制推送后收到同事… 2026/7/13 8:31:55
GitHub 学生包申请避坑:5个常见失败原因与开发者工具调试方案 GitHub 学生包申请技术排障指南:5个高频失败场景与开发者工具实战方案第一次尝试申请GitHub学生包时,我盯着屏幕上那个不断转圈的加载动画整整15分钟,最终只等来了一行冰冷的错误提示。这可能是许多开发者共同的经历——明明按照教程操作&… 2026/7/14 18:25:04
冒烟测试用例设计规范:5%-10%覆盖率下的3类核心场景与执行标准 冒烟测试用例设计的黄金法则:5%-10%覆盖率下的精准筛选策略在快节奏的敏捷开发环境中,冒烟测试作为质量保障的第一道防线,其重要性不言而喻。当测试资源有限而时间紧迫时,如何从海量测试用例中精准筛选出那关键的5%-10%࿰… 2026/7/14 5:09:41