和类属性一样,类方法也可以进行更细致的划分,具体可分为类方法、实例方法和静态方法。

和类属性的分类不同,对于初学者来说,区分这 3 种类方法是非常简单的,即采用 @classmethod 修饰的方法为类方法;采用 @staticmethod 修饰的方法为静态方法;不用任何修改的方法为实例方法。

其中 @classmethod 和 @staticmethod 都是函数装饰器,后续章节会对其做详细介绍。

接下来就给大家详细的介绍这 3 种类方法。

class CLanguage:

#类构造方法,也属于实例方法

def __init__(self):

self.name = "C语言中文网"

self.add = "http://c.biancheng.net"

# 下面定义了一个say实例方法

def say(self):

print("正在调用 say() 实例方法")

实例方法最大的特点就是,它最少也要包含一个 self 参数,用于绑定调用此方法的实例对象(Python 会自动完成绑定)。实例方法通常会用类对象直接调用,例如:

clang = CLanguage()

clang.say()

运行结果:

正在调用 say() 实例方法

当然,Python 也支持使用类名调用实例方法,但此方式需要手动给 self 参数传值。例如:

#类名调用实例方法,需手动给 self 参数传值

clang = CLanguage()

CLanguage.say(clang)

运行结果为:

正在调用 say() 实例方法

有关使用类名直接调用实例方法的更多介绍,可阅读《Python类调用实例方法》一节。

Python类方法

Python 类方法和实例方法相似,它最少也要包含一个参数,只不过类方法中通常将其命名为 cls,Python 会自动将类本身绑定给 cls 参数(注意,绑定的不是类对象)。也就是说,我们在调用类方法时,无需显式为 cls 参数传参。

和 self 一样,cls 参数的命名也不是规定的(可以随意命名),只是 Python 程序员约定俗称的习惯而已。

和实例方法最大的不同在于,类方法需要使用@classmethod修饰符进行修饰,例如:

class CLanguage:

#类构造方法,也属于实例方法

def __init__(self):

self.name = "C语言中文网"

self.add = "http://c.biancheng.net"

#下面定义了一个类方法

@classmethod

def info(cls):

print("正在调用类方法",cls)

注意,如果没有 @classmethod,则 Python 解释器会将 fly() 方法认定为实例方法,而不是类方法。

类方法推荐使用类名直接调用,当然也可以使用实例对象来调用(不推荐)。例如,在上面 CLanguage 类的基础上,在该类外部添加如下代码:

#使用类名直接调用类方法

CLanguage.info()

#使用类对象调用类方法

clang = CLanguage()

clang.info()

运行结果为:

正在调用类方法

正在调用类方法

Python类静态方法

静态方法,其实就是我们学过的函数,和函数唯一的区别是,静态方法定义在类这个空间(类命名空间)中,而函数则定义在程序所在的空间(全局命名空间)中。

静态方法没有类似 self、cls 这样的特殊参数,因此 Python 解释器不会对它包含的参数做任何类或对象的绑定。也正因为如此,类的静态方法中无法调用任何类属性和类方法。

静态方法需要使用@staticmethod修饰,例如:

class CLanguage:

@staticmethod

def info(name,add):

print(name,add)

静态方法的调用,既可以使用类名,也可以使用类对象,例如:

#使用类名直接调用静态方法

CLanguage.info("C语言中文网","http://c.biancheng.net")

#使用类对象调用静态方法

clang = CLanguage()

clang.info("Python教程","http://c.biancheng.net/python")

运行结果为:

C语言中文网 http://c.biancheng.net

Python教程 http://c.biancheng.net/python

在实际编程中,几乎不会用到类方法和静态方法,因为我们完全可以使用函数代替它们实现想要的功能,但在一些特殊的场景中(例如工厂模式中),使用类方法和静态方法也是很不错的选择。

python中类方法与实例方法的区别-Python实例方法、静态方法和类方法详解(包含区别和用法)...相关推荐

  1. python用类名直接调用方法_Python类的实例方法、静态方法、类方法详解,附代码示例...

    实例方法 普通实例方法(instance method),第一个参数需要是self,它表示一个具体的实例本身,只能被实例对象调用,通过self引用的可能是类属性.也有可能是实例属性. 实例方法访问类属 ...

  2. python安装方法3.8.2_Linux安装Python3.8.1的教程详解

    本例以Linux上安装Pyhton3.8版本为例进行说明 1.依赖包安装 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-dev ...

  3. python中类的构成_Python中类型关系和继承关系实例详解

    本文详细介绍了Python中类型关系和继承关系.分享给大家供大家参考.具体分析如下: 如果一个对象A持有另一个对象B的ID,那么检索到A之后就可以检索到B,我们就说存在一个A到B的导航.这种导航关系使 ...

  4. python中continue语句的作用_Pythoncontinue语句有什么作用?详解Pythoncontinue语句的用法...

    本文主要介绍python语句,Python continue 语句跳出本次循环,而break跳出整个循环.continue 语句用来告诉Python跳过当前循环的剩余语句,然后继续进行下一轮循环.co ...

  5. [python opencv 计算机视觉零基础到实战] 四、了解色彩空间及其详解

    一.学习目标 了解什么是色彩空间 了解opencv中色彩空间的转换 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[python opencv ...

  6. python调用shell脚本的参数_使用python执行shell脚本 并动态传参 及subprocess的使用详解

    最近工作需求中 有遇到这个情况 在web端获取配置文件内容 及 往shell 脚本中动态传入参数 执行shell脚本这个有多种方法 最后还是选择了subprocess这个python标准库 subpr ...

  7. python计算各类型电影的评分_【Python数据科学实战项目】之 基于MovieLens的影评趋势分析|详解...

    原标题:[Python数据科学实战项目]之 基于MovieLens的影评趋势分析|详解 注:图片源于https://movielens.org/ 1. 项目任务 1.1 数据来源 本项目使用Group ...

  8. 基于点击量的趋势分析python_【Python数据科学实战项目】之 基于MovieLens的影评趋势分析详解...

    原标题:[Python数据科学实战项目]之 基于MovieLens的影评趋势分析详解 本文转自: 数据科学DataScience 注:图片源于https://movielens.org/ 1. 项目任 ...

  9. python整数池_对Python中小整数对象池和大整数对象池的使用详解

    1. 小整数对象池 整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数对象池, 避免为整数频繁申请和销毁内存空间. Python 对小整数的定义是 [-5, 256] 这些整数对象是提 ...

最新文章

  1. java web程序示例_想要建立一些有趣的东西吗? 这是示例Web应用程序创意的列表。...
  2. [视频教程] 配置mysql用户的权限并查询数据
  3. 《Genesis-3D游戏引擎系列教程-入门篇》五:脚本
  4. SAP CRM WebClient UI Selenium UiElementHandler的实现
  5. golang 没有名字参数_Go 返回参数命名
  6. UNION 和UNION ALL 的区别
  7. 案例一:网站模拟登录
  8. ie不支持replaceall_继IE之后,微软又要彻底放弃这些office了
  9. 【手把手教你】股市技术分析利器之TA-Lib
  10. mysql 的时间函数
  11. 06.个人作业——软件产品案例分析
  12. php的get和post,PHP中GET和POST区别
  13. ebay增强可用性的4个原则
  14. 树莓派GPIO控制/使用的教程
  15. UE4元数据关键字的应用与含义(一)
  16. 双益策划有限公司校园推广策划方案
  17. 开发工具合集专题《管理工具,DoxygenAPI文档自动生成》
  18. 【C语言】自定义类型 结构体 枚举 联合
  19. 相比传统垂直摄影测量,倾斜摄影测量的独特优势是什么?
  20. 网络-----------端口的认识

热门文章

  1. python开发web运维工具_【实战小项目】python开发自动化运维工具--批量操作主机...
  2. 西安思源中学2021高考成绩查询入口,西安思源中学隆重举行2020-2021学年第二学期开学典礼...
  3. 开发日记-20190910 Makefile相关(一)
  4. 开发日记-20190513 关键词 汇编语言(六)
  5. MVC/MVP/MVVM区别——MVVM就是angular,视图和数据双向绑定
  6. 百度Tera数据库介绍——类似cassandra,levelDB
  7. ES批量索引写入时的ID自动生成算法
  8. linux 如何显示一个文件的某几行(中间几行)
  9. ERROR: cannot launch node of type [robot_pose_publisher/robot_pose_publisher]: robot_pose_publisher
  10. 【mybatis基础】mybatis开发dao两种方法