上一篇,我们讲到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中类中的方法还有区别?相关推荐

  1. python里面的类和对象_Python中类和对象在内存中是如何保存?

    类以及类中的方法在内存中只有一份,而根据类创建的每一个对象都在内存中需要存一份,大致如下图: 如上图所示,根据类创建对象时,对象中除了封装 name 和 age 的值之外,还会保存一个类对象指针,该值 ...

  2. Python 入门 —— Python 面向对象:类的创建及其基本内置方法的使用

    Python 面向对象:类的创建及其基本内置方法的使用 首先了解一下什么是面向对象 面向过程: 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了. ...

  3. 二十六. Python基础(26)--类的内置特殊属性和方法

    二十六. Python基础(26)--类的内置特殊属性和方法 ● 知识框架 ● 类的内置方法/魔法方法案例1: 单例设计模式 # 类的魔法方法 # 案例1: 单例设计模式 class Teacher: ...

  4. python静态方法和类方法的区别_python中类的静态方法和类的类方法

    知识回顾: 上一节中,我们深化学习了类的属性监控,主要使用了三个魔法方法:__getattr__ __setattr__ __delattr__ 与此同时在书写属性设置监控的时候,千万不要忘记写__d ...

  5. python函数的目的与意义_Python函数__new__及__init__作用及区别解析

    [同] 二者均是Python面向对象语言中的函数,__new__比较少用,__init__则用的比较多. [异] __new__是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例对象,是 ...

  6. python函数和类的区别_python-函数、类与对象

    一.定义函数 在Python中可以使用def关键字来定义函数,和变量一样每个函数也有一个响亮的名字,而且命名规则跟变量的命名规则是一致的.在函数名后面的圆括号中可以放置传递给函数的参数,这一点和数学上 ...

  7. python函数的四个特点_Python面向对象三大特征之封

    本文,我们先说封装,封装就是根据职责将属性和方法封装到一个抽象的类中: 一.面向对象基本概念 我们之前学习的编程方式就是面向过程的 面向过程和面向对象,是两种不同的编程方式 对比 面向过程 的特点,可 ...

  8. [转载] python函数分为哪几种_python常用函数

    参考链接: Python中的等分算法函数bisect Python常用函数 python中函数以两种形式呈现:一是可以自己定义的函数function,比如最常用的print()函数:另外一种是作为类的 ...

  9. python抽象基类的作用_Python:多态、鸭子模型和抽象基类

    1. 多态 什么是多态 -- 多态,指的是一种事务具有多种形态: -- python是一种动态语言,默认支持多态,同一个方法 调用 不同的类对象 ,执行的 结果各不相同: 多态实现 -- 继承:不同子 ...

最新文章

  1. Eclipse启动失败:No java virtual machine was found after searching the follwing locations
  2. 分支机构L2L *** 到总部再PAT通过专线到合作伙伴(SVTI建立***)
  3. SpringSide 4 QuickStart运行Demo
  4. setProperty will trigger ui re-render 南京同事提的问题
  5. 使用Server 2008新GPO做驱动器映射
  6. android 按钮控制线程,关于手机安卓-线程测试
  7. 机器视觉:平行光源在双远心系统中的应用
  8. Oracle 归档模式
  9. Nuget如何管理本地的包
  10. Oracle密码过期处理
  11. 加壳及脱壳《逆向工程》
  12. 根据正则表达式创建NFA的Thompson算法 python实现
  13. 原来这才是折叠屏的刚需...
  14. win7系统如何备份还原,win7系统映像备份与恢复
  15. 基于OpenAI的Chatbot开发记录
  16. 普通人最缺乏的深度思考能力,该如何培养?
  17. Geogebra的使用
  18. 912 计算机考研专业课,2019清华大学计算机考研912考试教材如何选择?
  19. VB运行后去除窗体标题栏且可改变窗口大小及移动窗体
  20. VMware 虚拟机图文安装和配置 Rocky Linux 8.5 教程

热门文章

  1. IBM AIX 5.3 系统管理 -- 系统启动过程详解
  2. 操作系统学习笔记目录(暂时不全223)
  3. Unity3D-光照系统
  4. centos php日志分析,记录一下CentOS7安装GoAccess日志分析工具
  5. python 通信模块_python 多进程通信模块
  6. python获取mac窗口坐标_[代码全屏查看]-Python3根据IP地址获取MAC地址
  7. mediarecorder添加时间戳_Python脚本实现数据处理(官方实例)和Hive自带时间函数...
  8. html border阴影效果_【开发小技巧】026—如何使用HTML和CSS创建浮动框阴影效果?...
  9. ROS 学习笔记(二):自定义消息msg+Publisher+Subscriber 示例运行
  10. MATLAB中的S-Function的用法(C语言)