第7.14节 Python类中的实例方法详析

深入理解 Python 类中的各种方法 实例方法:绑定到实例,通过 self 访问实例属性和方法。类方法:绑定到类,通过 cls 访问和修改类属性。静态方法:不绑定到实例或类,通常用于逻辑上属于类但不依赖实例或类属性的方法。特殊方法:以双下划线包围,由 Python 在特定情况下自动调用。属性方法:将方法转换为属性,提供定制的 getter、setter 和 deleter。__new__ 方法:用于创建实例,在 __init__ 之前调用。__call__ 方法:使实例可以像函数一样被调用。__del__ 方法。 阅读详情

第7.14节 Python类中的实例方法详析

一、    实例方法的定义
在本章前面章节已经介绍了类的实例方法,实例方法的定义有三种方式:
1.    类体中定义实例方法
第一种方式很简单,就是在类体中定义,所有在类中定义的方法默认是实例方法。定义实例方法与定义函数基本相同,只是Python要求实例方法的第一个形参必须为self,也就是实例对象本身,因此实例方法至少应该有一个self参数。关于self的说明,请大家参考老猿前面的章节《第7.5节 揭开Python类中self的面纱》。如下例子:

class MethodTest():
    def method1(self):print("in method1")

2.    在类体外将一个函数直接赋值给一个对象实例
Python 是动态语言,允许为对象动态增加方法,相关步骤如下:
1)    按照实例方法定义形式在类体外定义一个函数,函数需要将self作为第一个参数;
2)    使用“实例对象名.方法名=函数”方式在实例中增加方法。
老猿认为,这种动态定义实例方法,本质上就是动态增加实例变量,只是这个实例变量比较特殊,是个函数类型,对应的赋值也是一个函数。因此上述方法定义的实例方法,与类体中定义的方法还是有差别的,对这种方法Python 不会将实例对象自动绑定到方法的第一个参数,即使将第一个参数命名为 self 也没有用。
3.    在类体外将一个函数绑定到对象实例
这种方法与第二种方法本质上是一致的,只是能解决调用时无法自动将实例对象作为第一个实参处理的问题。具体绑定方法如下:
1)    按照实例方法定义形式在类体外定义一个函数,函数需要将self作为第一个参数;
2)    使用“实例对象名.方法名 = MethodType(函数, 对象)” 方式在实例中增加方法。
其中MethodType是从Python的types模块import进来的,通过MethodType可以将函数与实例对象的某个方法进行绑定,调用时就无需再传递实例对象到第一个参数。

上述第二种和第三种方法都是动态方法,绑定的“实例对象名.方法名”可以是一个已经存在的实例方法,也可以是新定义的一个属性方法,如果是一个已经存在的实例方法,新绑定的函数将替换原实例的方法。

二、    实例方法的使用
1.    实例方法可以在类体的实例方法内调用,此时调用方使用“self.方法”方式调用,并在调用传递实参时不需要使用self。请看如下类的定义和调用:

class MethodTest():
    def method1(self):print("in method1")
    def method2(self):
        print("in method2")
        self.method1()

上述代码中method2调用了方法method1,使用self方式调用。
2.    在类体外面调用类体内直接定义的实例方法,直接用“实例名.方法名”方式调用,对于类体内定义的实例方法传实参时无需传递self形参对应的实参,由Python在编译时自动添加实例对象作为第一个实参。请看上面的类定义实例对象后调用method2:

m1=MethodTest()
m1.method2()

上述样例代码执行截图:

注意:在类外调用实例方法时,无需也不能传递self的实参,由Python解释器自动为其在后面执行时添加。如果定义的方法没有以类方法的方式定义,也没有在方法定义时将self作为第一个形参,编译时并不会报错,但调用该实例方法时会有运行时错误,因为Python会强行绑定实例对象作为第一个参数,因此调用者的实参与定义的形参是一样时,此时会多出一个实参self,导致执行时报参数个数不对的错误。
3.    在类体外面调用通过函数直接赋值定义的实例方法时,其调用方式与类体内定义的模式不同,要求第一个实参必须是调用的对象本身;
以上面的类MethodTest为例,如果要增加一个method3的实例方法,其代码如下:

def dynamicmethond(self):print("in DynamicMethond")
m1.method3=dynamicmethond

这样m1这个实例就增加了一个method3方法,调用代码如下:
m1.method3(m1)  #注意必须在第一个参数将实例自身传递进去

4.    在类体外面调用通过MethodType绑定的实例方法时,其调用方式与类体内定义的模式相同,第一个形参self对应的实参无需传值,由Python自动添加对应的实例对象;
以上面的类MethodTest为例,如果要增加一个method4的实例方法进行绑定,其代码如下:

def dynamicmethond(self):print("in DynamicMethond")
m1.method4= MethodType(dynamicmethond,m1)

这样m1这个实例就增加了一个method4方法,且实现了方法与实例的绑定,调用代码如下:

m1.method4()

三、    构造方法
之所以单独介绍构造方法,是因为构造方法是一个特殊的实例方法,具体特殊性包括如下:
1.    Python的构造方法对所有自定义类名字都固定为__init__,且第一个参数必须为self;
2.    可以允许开发者没有在类中定义构造方法,此时Python 会自动为该类定义一个只包含一个 self 参数的默认的构造方法;
3.    构造方法如果有多个形参,除了第一个参数必须是self外,其他参数都是创建实例时在类名后面的括号中给出,也就构造方法的参数就是创建实例时传入的参数,也必须是创建实例时传入;
4.    构造方法是每个实例定义时自动执行;
5.    在子类重写构造方法时,必须调用超类(继承的类)的构造方法,否则可能无法正确地初始化对象。
1)    Python3中所有类都继承于object类,构造函数的重写不用考虑object类的情况,即无需调用object类的构造函数;
2)    在构造方法中调用父类的构造方法时,可以使用“父类.类名.__init__(self,其他参数)”的方式调用;
3)    在构造方法中调用父类的构造方法时,可以使用“super().__init__ (参数)”的方式调用,注意此时的参数中不能传递self参数。但这种情况如果存在多个超类时,执行的是第一个超类的构造方法,其实参必须按照第一个超类构造方法的形参来传递,其他超类的构造方法必须通过“父类.类名.__init__(self,其他参数)”的方式调用。
理解了这几点,结合其他语言的构造方法,就理解了Python的构造方法。

四、    本节相关代码的完整执行截屏

本节结合案例详细介绍了实例方法的定义和使用方法,需要注意,动态定义实例方法只影响单个实例自身,对其他实例没有影响。老猿认为动态定义实例方法的使用范围比较有限,如果可能尽量使用类体定义实例方法,仅在特定场景(如动态扩展功能)下使用动态实例方法。
老猿Python(https://blog.youkuaiyun.com/LaoYuanPython)系列文章用于逐步介绍老猿学习Python后总结的学习经验,这些经验有助于没有接触过Python的程序员可以很容易地进入Python的世界。
欢迎大家批评指正,谢谢大家关注!

【Python入门】一篇就能让你完全掌握Python中的类和对象 本篇博客超级详细,阅读时请尽量使用电脑端结合目录。在编程中,类和对象是面向对象编程(OOP)的核心概念。Python 是一门支持面向对象编程的语言,这意味着你可以使用类和对象来组织代码,使其更加模块化、可维护和可扩展。 阅读详情

相关推荐

python类设计(类方法和变量,实例方法和变量@classmethod)

题目要求: 设计一个公司类,完成以下要求,并实例化不同对象进行验证 ​ 类变量 类下公司的总个数,类下实例的名称列表 ​ 类方法 返回公司类共有多少个公司实例 返回公司类的公司实例有名称列表 ​ 实例变量 公司名,简介,利润,销售额,总成本,雇员姓名 ​ 实例方法: 招聘人才(每招一个人会有成本产生,影响该实例雇员列表,人数,总成本) 解雇人员(每解雇一个人会有成本产生,影响该实例雇员列表,人数...

莲君 1669

针对Python 实例方法、类方法和静态方法的详解

1. 概览 先定义一个最简单的 Python 3 的类: class MyClass: def method(self): print('我是实例方法', self) @classmethod def classmethod(cls): print('我是类方法', cls) @staticmethod def staticmethod(): print('我是静态方法') 1.1 实例方法 第一个方法 metho

Python热爱者的博客 2969

Python 类中的实例方法详解

我们学习了实例方法的定义和调用方式,以及如何在实例方法中访问和修改实例属性,以及如何在实例方法之间进行调用。类中的实例方法是与类的实例相关联的函数,它们可以访问类的属性和其他实例方法。实例属性是保存在实例中的变量,它们可以在类的任何实例方法中访问和修改。实例方法中,我们访问了这个实例属性,并将其值修改为 10。实例方法是与类的实例相关联的函数,它们通过。通过这个参数,实例方法可以访问实例的属性和其他实例方法。实例方法是在类中定义的函数,它们的第一个参数通常被命名为。的实例方法,并在方法体内访问了实例属性。

CodeHeroicX的博客 247

python 实例方法 类方法_Python实例方法、类方法和静态方法

Python类的组成主要包含两个部分,类的属性和类的方法。类的属性是对数据的封装,这些数据是用来描述类所抽象的事物的特征;类的方法是用来表示对象的特定行为。Python的类的方法又可以进一步细分为三种不同类型,即实例方法、类方法和静态方法。这里就是对类的这三种方法进行详细讨论,包括它们是如何实现、如何被调用以及各自的特点。实例方法实例方法是你在Python中将会在大多数情况下使用到的最基本、最简单...

weixin_42465030的博客 792

深度解析:Python中的类方法、实例方法与静态方法

本文将通过详细的理论讲解和实际案例分析,带你深入了解这三种方法的区别与应用场景,帮助你写出更加简洁、高效和可维护的Python代码。在Python中,类(Class)是面向对象编程的核心,而方法是类中定义行为的主要方式。在实际开发中,根据需求选择合适的方法类型,不仅可以提升代码的可读性,还能增强代码的复用性和可维护性。它们的定义、调用方式以及适用场景各不相同,如何正确理解并使用这些方法是深入学习Python的关键。实例方法是类的最常见方法,通过在类中定义并传入。是一个纯工具方法,与类的实例和属性无关。

fudaihb的博客 1822

基于大模型的肾结石诊疗全流程风险预测与方案制定研究报告

目录一、引言1.1 研究背景与意义1.2 国内外研究现状1.3 研究目标与内容二、大模型技术原理与应用概述2.1 大模型的基本原理2.2 大模型在医疗领域的应用进展2.3 适用于肾结石预测的大模型选择与依据三、术前风险预测与准备3.1 患者身体状况评估3.2 结石情况分析3.3 术前准备方案制定四、术中风险预测与应对4.1 出血风险预测与处理4.2 脏器损伤风险预测与预防4.3 实时监测与决策支持五、术后恢复预测与护理5.1 恢复时间预测5.2 护理要点与措施5.3 并发症预防与处理六、并发症风险预测与管理

嵌入式毕设/课设资料清单(速查手册·文档模板·题库,持续更新)→ 见最新文章 1147

在python中定义类时实例方法的第一个参数_第7.14节 Python类中的实例方法详析

第7.14节 Python类中的实例方法详析一、 实例方法的定义在本章前面章节已经介绍了类的实例方法,实例方法的定义有三种方式:1. 类体中定义实例方法第一种方式很简单,就是在类体中定义,所有在类中定义的方法默认是实例方法。定义实例方法与定义函数基本相同,只是Python要求实例方法的第一个形参必须为self,也就是实例对象本身,因此实例方法至少应该有一个self参数。关于self的说...

weixin_39550937的博客 3834

Linux -- 图形界面配置Samba;system-config-samba工具

图形界面配置Samba6.6.1 system-config-sambasystem-config-samba是Red Hat公司专门为Samba服务器管理编写的图形界面的管理工具,通过system-config-samba几乎可以完成对Samba服务器的所有配置,所以在只希望通过Samba服务器实现一些简单的资源共享时,system-config-samba是一个不错的选...

weixin_33695450的博客 2200

python类的实例方法必须创建对象前还是后可以调用_第7.14节 Python类中的实例方法详析...

第7.14节 Python类中的实例方法详析一、 实例方法的定义在本章前面章节已经介绍了类的实例方法,实例方法的定义有三种方式:1. 类体中定义实例方法第一种方式很简单,就是在类体中定义,所有在类中定义的方法默认是实例方法。定义实例方法与定义函数基本相同,只是Python要求实例方法的第一个形参必须为self,也就是实例对象本身,因此实例方法至少应该有一个self参数。关于self的说...

weixin_39603622的博客 6172

实战指南:从零搭建ROS2 + Cartographer 2D激光SLAM系统

本文详细介绍了如何从零开始搭建ROS2与Cartographer结合的2D激光SLAM系统,涵盖环境准备、激光雷达驱动配置、Cartographer安装与参数调优等关键步骤。通过实战案例和常见问题解决方案,帮助开发者快速掌握激光雷达建图技术,提升机器人自主导航能力。

weixin_29062255的博客 402

【安装文档】TRex流量分析仪保姆级安装指南--基于VMware虚拟机(ubantu18.04@Intel 82545EM

如果之前添加了网卡,这里就可以看见有3个网卡(没添加的现在再加也行),* Active *为Linux内核正在使用的网卡,另外两张是未启用的网卡(注:未启用的网卡在终端中使用ifconfig命令是查不到的,需要先使用ip addr找出网卡,再激活,此时网卡会变为* Active *状态。

lingshengxiyou的博客 2130

python十四类实用技巧_第7.14节 Python类中的实例方法详析

第7.14节 Python类中的实例方法详析一、 实例方法的定义在本章前面章节已经介绍了类的实例方法,实例方法的定义有三种方式:1. 类体中定义实例方法第一种方式很简单,就是在类体中定义,所有在类中定义的方法默认是实例方法。定义实例方法与定义函数基本相同,只是Python要求实例方法的第一个形参必须为self,也就是实例对象本身,因此实例方法至少应该有一个self参数。关于self的说...

weixin_36357157的博客 243

【华为OD机试真题 新系统】1010、魔法阵的能量收集 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS)

【华为OD机试真题 新系统】1010、魔法阵的能量收集 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS) 华为od机试,华为od机试真题,华为od机试E卷,华为odE卷,华为od机试真题E卷,华为OD,华为OD机试,华为OD机试真题,华为od机考,华为od机试D卷,华为od机试真题D卷,华为od手撕代码,华为od,华为od机试C卷,华为od e卷,华为2026e卷,od机试,2026E卷,华为OD机试E卷,什么是华为od,华为od介绍,全面了解华为od,2026华为od,如何备战华为

KJ.JK 1071

python类中方法调用自己类的方法_python 类中方法总结 --- 实例方法、类方法、静态方法...

在python的类语法中,可以出现三种方法,具体如下:(1)实例方法1)第一个参数必须是实例本身,一般使用【self】表示。2)在实例方法中,可以通过【self】来操作实例属性,【类名】来操作类属性。3)实例方法只能通过实例对象去调用,尽管也可以通过类名间接调用【类名.方法名(self, ...)】,但此时仍然需要传入self对象。(2)类方法1)使用【@classmethod】修饰函数,且第一个...

weixin_39976081的博客 7531

multisim14.3无法访问数据库...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 4449

UNet改进(23):如何用SLCAM模块提升UNet的分割性能

本文提出一种改进的UNet架构,通过引入轻量化注意力模块(SLCAM)增强医学图像分割性能。SLCAM整合了通道和空间双重注意力机制:通道注意力采用全局池化和共享MLP学习通道权重,空间注意力通过7×7卷积捕捉上下文信息。网络在传统UNet基础上,在每个下采样和上采样块后加入SLCAM模块,并保持跳跃连接结构。实验表明,该方法能自适应聚焦重要特征,在不显著增加计算负担的情况下提升分割精度,特别适用于医学图像等需精确边界的场景。未来可探索三维注意力、动态参数调整等改进方向。

2501_91516851的博客 438

python析构方法使用的名字是_python基础:14.面向对象之构造和析构方法

0.前言如果可以的话,请先关注(专栏和账号),然后点赞和收藏,最后学习和进步。你的支持是我继续写下去的最大动力,个人定当倾囊而送,不负所望。谢谢!!!1.前提基于win10专业版64位系统+64位jdk1.8+64位python3.6.5+社区版pycharm2018.1.3+unittest+selenium3.141.0。要学好自动化测试,我们先从python语言基础开始学习,一步一个脚印,欲...

weixin_39520869的博客 375

【DaVinci Configurator专题】-6-将UDS&OBD诊断数据库文件CDD和PDX导入到CFG

CDD和ODX是两种诊断数据库文件。机器可读的诊断数据库其实就是将传统的Excel调查表等信息编辑成CDD或ODX文件。CDD是Vector私有的一种诊断数据库格式;ODX是国际标准的诊断数据交互格式。CANdelaStudio编辑CDD文件,以及也可以导出ODX文件;ODX Studio用于编辑ODX文件,诊断数据库的编辑其实就是诊断需求的定义。 下面以PDX为例,将其导入到DaVinci Configurator。 目录 1 打开DaVinci Configurator,导入PDX文件 2 解.

「汽车电子助手」的博客 6751

python 类 析构_python基础:14.面向对象之构造和析构方法

0.前言如果可以的话,请先关注(专栏和账号),然后点赞和收藏,最后学习和进步。你的支持是我继续写下去的最大动力,个人定当倾囊而送,不负所望。谢谢!!!1.前提基于win10专业版64位系统+64位jdk1.8+64位python3.6.5+社区版pycharm2018.1.3+unittest+selenium3.141.0。要学好自动化测试,我们先从python语言基础开始学习,一步一个脚印,欲...

weixin_36050866的博客 235

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

第8.12节 Python类中使用__dict__定义实例变量和方法

上节介绍了使用实例的__dict__查看实例的自定义属性,其实还可以直接使用__dict__定义实例变量和实例方法。 一、 使用__dict__定义实例变量 语法: 对象名. dict[属性名] = 值 语法释义: “对象名”为要增加实例变量的对象,如果是在实例方法中,应该为”self”。 属性名为要定义实例变量的名字,必须是字符串类型,即变量名必须用引号。 上述语法相当于: 对象.属性 = 值...

老猿Python 2589

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Python定义类、创建类的对象(类的实例化)

定义类 语法格式 在python中,可以通过class关键字定义类,然后通过定义的类来创建实例对象。语法格式如下: calss 类名: 类体 注意事项 在python中使用class关键字来定义类,定义类时需要注意以下几个事项: (1)类代码块以class关键字开头,代表定义类。 (2)class之后是类名,这个名字由用户自己指定,命名规则一般是多个单词组成的名称,每个单词除了第一个字母大写之外,其余字母均为小写,class和类名中间要有空格。 (3)类名后加冒号,类体由缩进的语句块组成,

m0_53977675的博客 1万+

Python类变量、实例变量与构造方法、实例方法、类方法和静态方法

类中变量与方法创建类类中变量——实例变量 和 类变量实例变量类变量__dict__魔法方法类中函数——构造方法、实例方法、类方法 和 静态方法构造方法——__init__实例方法——self中类方法——不需要绑定静态方法——@staticmethod 学习面向对象有一个关键就是封装性,如果没学自定义函数的就先看看自定义函数再来。 文章所有代码都在.实例变量和类变量-SRC文件夹中,如果在博客中看的,可以去我的仓库中查看代码 实例变量和类变量-SRC——Repository 创建类 首先忘了讲怎么定义一个类

被一个OIER遗弃的一堆烂代码 1645

python中的类及方法种类

python 中的类与实例方法、类方法、静态方法其他编程语言中,类方法就是类的静态方法,叫法不同而已;但是python中,这两个是不同概念的。下面通过具体的例子来说明age = 12#初始化对象时会调用这个方法,类似C++中的构造函数#实例化对象时调用,可以通过其参数看出,里面有cls参数#魔术方法#打印一个对象时,会调用该方法#类似C++的析构函数,对象生命周期结束,销毁时调用#实例方法#静态方法,没有任何参数,访问类的成员变量时,只能是用类名.变量名。

itcolossus的专栏 597

第7章 Python类型、类、协议目录

第7.1节 面向对象程序设计的相关知识 第7.2节 关于面向对象设计的一些思考 第7.3节 Python特色的面向对象设计:协议、多态及鸭子类型 第7.4节 Python中与众不同的类 第7.5节 揭开Python类中self的面纱 第7.6节 Python中类的继承机制详述 第7.7节 案例详解:Python类继承机制 第7.8节 Python中隐秘的类封装方法 第7.9节...

老猿Python 1830

python类的定义与实例化

类的定义与实例化 在Python中,通过class关键字定义一个类,比如我们需要定义一个人的类。按照 Python 的编程习惯,类名以大写字母开头。因此可以这样定义: class Person: pass 注意,在这个Person类的定义里面,并没有继承任何类,除了这样定义以外,还可以有以下两种定义方式。 class Person(): pass class Person(object): pass 在python3中,这三种定义是没有区别的, 在Python2中,对于第一种定义的方法,Pe

SHeep_o5博客 1万+
上一篇: 第7.13节 案例详解:Python类变量
下一篇: 第7.15节 Python中classmethod定义的类方法详解
LaoYuanPython
LaoYuanPython 2020年博客之星Top3 2020年博客之星Top3 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄8年 15万+粉丝 1324原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值