python函数和类的区别_Python中类中的方法还有区别?
上一篇,我们讲到Python类中的属性是有区别的,爱思考的小伙伴们可能就会问了,Python中的方法是不是也有区别呢?是的,而且Python中的方法区别更大,让我们来看看吧~
Python类中的三种方法
Python中的方法可以分为三类:
实例方法:第一个参数是实例对象 self,必须通过实例去调用。
类方法:需要在方法前加 @classmethod 修饰,第一个参数是类本身,一般写作cls,类和实例都可以调用。
静态方法:需要在方法前加 @staticmethod修饰,没有隐含传递的参数:方法体中不能使用类或实例的任何属性和方法
这里的@classmethod 和 @staticmethod 都是函数装饰器(Decorators),简单来说它是一个修改其它函数的功能的函数。具体的细节涉及到Python更深层的东西。在这里我们只需要了解只要它俩出现,那么这个方法就是类方法或者静态方法。
看过上一篇的小伙伴们应该都知道self是什么了,在这里简单再说一下,我们可以使用self指代的是当前的实例,相当于每个实例的钥匙,根据self,每个实例只能调用自己的变量和方法。
是不是看完还是觉得有点绕呢~为了更清楚地了解这三个方法的差异,我们还是拿例子来进行讲解
在这个例子里面,我们定义了一个类Student,小伙伴们应该会发现,我们在Student类里定义了一个类属性grade和两个实例属性age和height。然后我们分别定义了三个方法,根据刚开始我们给的三种方法的介绍,小伙伴们能不能看出这三个方法分别属于哪一种呢?
这个不难~
print_age方法是一个实例方法,它的第一个参数是self,前面没有任何的修饰。
print_grade方法是一个类方法,他的第一个参数是cls,前面使用@classmethod修饰。
Print_info方法是一个静态方法,他没有任何的参数,前面使用@staticmethod修饰
我们在定义完Student类后,我们分别使用类Student和实例tom去调用这三个方法,看看会发生什么~
大家观察代码第15-22行可以看到,当我们使用类Student调用print_age方法时,它会报错,显示缺少一个参数self。这是因为这里不是这时还没有类的实例,而且方法中的self.age属性也不存在,这时候是不能调用实例方法的。而我们使用类Student调用print_grade方法就没有问题,因为我们已经声明这是个类方法,而且grade这个属性在类中已经定义好了。同样,因为我们已经声明print_info是静态方法,所以调用也是没有问题的。
我们也根据Student类生成了一个实例tom,然后我们使用实例tom去调用这三个方法,看看会发生什么~
如上面的代码所示,三个方法都正确的输出了结果,表明这三种方法都可以被类的实例调用。
我也给小伙伴们制作了一个简单的表格,方便大家查询。
实际使用中如何选择三种方法
那么说了这么多,比较了这三种方法的差异,那么为什么会有这三种方法的区别呢?因为他们对于不同属性的调用有所区别,可被调用的对象不同,所以在实际使用中就是根据这些差异来选择最合适的方法。
实例方法是类中最普遍的方法,我们通常定义的都是实例方法,不需要多说了。
关于类方法,如果说我现在要定义一个方法,这个方法只需要调用类属性,也只在把类当作一个对象使用的时候才会需要这个方法,或者说在逻辑上采用类本身作为对象来调用更合理,这时候就应该使用类方法。
关于静态方法,我们可以发现它不需要任何的参数,不会涉及到类中的属性和方法的操作。本质上说它只是在逻辑上逻辑上属于类,但是和类本身没有关系,在碰到这种情况时可以定义静态方法。
结束语
在Python的类中,不同的方法有不同的应用范围,根据自己的实际需求,选择合适的方法,才能发挥每个方法最大的用处。小伙伴们快快试起来吧~
python函数和类的区别_Python中类中的方法还有区别?相关推荐
- python里面的类和对象_Python中类和对象在内存中是如何保存?
类以及类中的方法在内存中只有一份,而根据类创建的每一个对象都在内存中需要存一份,大致如下图: 如上图所示,根据类创建对象时,对象中除了封装 name 和 age 的值之外,还会保存一个类对象指针,该值 ...
- Python 入门 —— Python 面向对象:类的创建及其基本内置方法的使用
Python 面向对象:类的创建及其基本内置方法的使用 首先了解一下什么是面向对象 面向过程: 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了. ...
- 二十六. Python基础(26)--类的内置特殊属性和方法
二十六. Python基础(26)--类的内置特殊属性和方法 ● 知识框架 ● 类的内置方法/魔法方法案例1: 单例设计模式 # 类的魔法方法 # 案例1: 单例设计模式 class Teacher: ...
- python静态方法和类方法的区别_python中类的静态方法和类的类方法
知识回顾: 上一节中,我们深化学习了类的属性监控,主要使用了三个魔法方法:__getattr__ __setattr__ __delattr__ 与此同时在书写属性设置监控的时候,千万不要忘记写__d ...
- python函数的目的与意义_Python函数__new__及__init__作用及区别解析
[同] 二者均是Python面向对象语言中的函数,__new__比较少用,__init__则用的比较多. [异] __new__是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例对象,是 ...
- python函数和类的区别_python-函数、类与对象
一.定义函数 在Python中可以使用def关键字来定义函数,和变量一样每个函数也有一个响亮的名字,而且命名规则跟变量的命名规则是一致的.在函数名后面的圆括号中可以放置传递给函数的参数,这一点和数学上 ...
- python函数的四个特点_Python面向对象三大特征之封
本文,我们先说封装,封装就是根据职责将属性和方法封装到一个抽象的类中: 一.面向对象基本概念 我们之前学习的编程方式就是面向过程的 面向过程和面向对象,是两种不同的编程方式 对比 面向过程 的特点,可 ...
- [转载] python函数分为哪几种_python常用函数
参考链接: Python中的等分算法函数bisect Python常用函数 python中函数以两种形式呈现:一是可以自己定义的函数function,比如最常用的print()函数:另外一种是作为类的 ...
- python抽象基类的作用_Python:多态、鸭子模型和抽象基类
1. 多态 什么是多态 -- 多态,指的是一种事务具有多种形态: -- python是一种动态语言,默认支持多态,同一个方法 调用 不同的类对象 ,执行的 结果各不相同: 多态实现 -- 继承:不同子 ...
最新文章
- Eclipse启动失败:No java virtual machine was found after searching the follwing locations
- 分支机构L2L *** 到总部再PAT通过专线到合作伙伴(SVTI建立***)
- SpringSide 4 QuickStart运行Demo
- setProperty will trigger ui re-render 南京同事提的问题
- 使用Server 2008新GPO做驱动器映射
- android 按钮控制线程,关于手机安卓-线程测试
- 机器视觉:平行光源在双远心系统中的应用
- Oracle 归档模式
- Nuget如何管理本地的包
- Oracle密码过期处理
- 加壳及脱壳《逆向工程》
- 根据正则表达式创建NFA的Thompson算法 python实现
- 原来这才是折叠屏的刚需...
- win7系统如何备份还原,win7系统映像备份与恢复
- 基于OpenAI的Chatbot开发记录
- 普通人最缺乏的深度思考能力,该如何培养?
- Geogebra的使用
- 912 计算机考研专业课,2019清华大学计算机考研912考试教材如何选择?
- VB运行后去除窗体标题栏且可改变窗口大小及移动窗体
- VMware 虚拟机图文安装和配置 Rocky Linux 8.5 教程
热门文章
- IBM AIX 5.3 系统管理 -- 系统启动过程详解
- 操作系统学习笔记目录(暂时不全223)
- Unity3D-光照系统
- centos php日志分析,记录一下CentOS7安装GoAccess日志分析工具
- python 通信模块_python 多进程通信模块
- python获取mac窗口坐标_[代码全屏查看]-Python3根据IP地址获取MAC地址
- mediarecorder添加时间戳_Python脚本实现数据处理(官方实例)和Hive自带时间函数...
- html border阴影效果_【开发小技巧】026—如何使用HTML和CSS创建浮动框阴影效果?...
- ROS 学习笔记(二):自定义消息msg+Publisher+Subscriber 示例运行
- MATLAB中的S-Function的用法(C语言)