Python中类方法和静态方法的区别你知道吗?

​1.类方法

  • 通过 @classmethod 装饰器修饰的方法就是类方法

  • 类方法可以通过类名或对象名调用,但是一般情况下使用类名调用(节省内存)

  • 类方法中没有self.在类方法中不可以使用其它对象的属性和方法

  • 类方法中一般会有一个参数cls,表示当前类。cls仅仅是一个变量名称,可以用其它变量名来代替,一般情况下会直接使用cls,因为cls是class的简写

  • cls表示的是当前类

2.静态方法

  • 通过 @staticmethod 装饰器修饰的方法就是静态方法

  • 通过类名或者对象名调用静态方法,一般使用类名调用(节省内存)

  • 在静态方法中没有cls这个形式参数,在静态方法中一般不推荐调用其他的方法(对象的方法/类方法/其他的静态方法)

  • 静态方法一般是一个单独的方法,只是写在类中

3.类方法和静态方法区别

  • 类方法与静态方法的最大区别在于它们的绑定方式。类方法使用`cls`作为第一个参数,表示类本身,而静态方法使用`self`作为第一个参数,表示类的实例。这意味着,类方法可以通过类或实例来调用,而静态方法只能通过实例来调用。让我们通过一个简单的例子来理解它们之间的区别。

4.例子

  • 定义类

class Animal():# 类属性name = "动物"# 构造函数def __init__(self, sex, name):self.sex = sexself.name = name# 对象的方法def eat(self):print("吃饭的方法...")# 定义类方法@classmethoddef run(cls):print("我是类方法")# 静态方法@staticmethoddef drink():print("我是静态方法")# 创建对象
animal = Animal("公", "狼青")
# 通过对象调用对象的方法
animal.eat()# 通过类名调用类方法(推荐)
Animal.run()
# 通过对象调用类方法(不推荐)
animal.run()# 通过类名调用静态方法(推荐)
Animal.drink()
# 通过对象名调用静态方法(不推荐)
animal.drink()
  • 运行结果

吃饭的方法...
我是类方法
我是类方法
我是静态方法
我是静态方法
  • 通过这个例子,我们可以看到类方法和静态方法的区别。类方法可以通过类或实例来调用,而静态方法只能通过实例来调用。另外,当我们想要在方法中访问类的属性和其他方法时,使用类方法更加方便。而当我们需要定义一些与特定对象关联但与类无关的方法时,可以使用静态方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/543454.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Crc冗余校验码设计

串行电路的位置,有异或门的地方是1(生成多项式) 简单的来说,如果最高位Q4 为0 的话,那么直接和 0 进行异或的话,实现的也是自己本身,直接左移就可以了 如果最高是1的话,那么就要和生…

【数据结构与算法】:选择排序与快速排序

🔥个人主页: Quitecoder 🔥专栏:数据结构与算法 我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:腾讯云 欢迎来到排序的第二个部分:选择排序与快速排序! 目录 1.选择排序1.…

如何export windows中的环境变量

在大语言模型(LLM)学习过程中, 利用 jupyter 导入环境变量时出现以下问题, C:\Users\zhangxuantao>export SENSENOVA_SKxxxxxx export 不是内部或外部命令,也不是可运行的程序 或批处理文件。 原因是学习教程中用…

VTK安装(C++)并配置vs

准备工作: 1.VTK下载包(此教程使用VTK8.2.0) 2.CMAKE(此教程使用3.29.0) 在此不过多赘述,可在网上搜索cmake安装 3.visual studio(此教程使用vs2019) VTK下载及编译: 1、找到自己适合的VTK版本,我选择的是VTK8.2.0。 1.1 官网下载&#xff…

天水麻辣烫榜上有名!2024适合普通人的创业项目!2024最适合创业的三大行业!2024热门创业项目!

1、天水麻辣烫 最近济南6天开了4家甘肃麻辣烫天天爆满 有店日营业额破万元有店主飞甘肃天水学习5天回来迅速开店!选择天水麻辣烫作为创业项目绝对是一个明智的选择。趁着现在的热度,开设一家门店,借助其已经积累的名气和口碑,创业…

Docker常用命令的使用及镜像的构建

1.docker的好处 在开发中可能会遇到一个问题,一个程序在自己电脑上能跑,但是换到服务器上就不行了。如果我们重新搭建环境,需要重新部署mysql,es,redis等组件很麻烦。有了docker之后,我们可以快速完成项目的部署。同时docker的隔…

L1-072 刮刮彩票 分数 20 (巧用一维数组,数组加和)

啊啊啊啊啊啊啊啊明明就想出来了,明明就,就差这2分为什么为什么啊!!!忘记当 tt 大于3小于6时应该 - 3 了,哎呦喂,三位的数组哪有4,5,6啊啊啊啊啊忘记减了,忘了…

C语言数据结构(7)——树、二叉树前言

欢迎来到博主的专栏——C语言数据结构 博主ID:代码小豪 文章目录 树二叉树特殊二叉树满二叉树完全二叉树 完全二叉树的存储结构 树 树是一个非线性的数据结构,由N个结点构成的集合。 树的各个结点由一个根结点联系起来,这个根节点没有前驱…

电子科技大学链时代工作室招新题C语言部分---题号E

1. 题目 这道题大概的意思是说,一座城市中被埋了许多雷(用一个只含0和1的字符串表示城市,1代表有雷,0代表无雷)。 你作为一个排雷兵,需要花最少的钱引爆所有的雷来使城市中不再有雷(太逆天了&a…

【小白刷leetcode】第15题

【小白刷leetcode】第15题 动手刷leetcode,正在准备蓝桥,但是本人算法能力一直是硬伤。。。所以做得一直很痛苦。但是不熟练的事情像练吉他一样,就需要慢速,多练。 题目描述 看这个题目,说实在看的不是很懂。索性我们直…

基于Java+SpringMVC+vue+element实现前后端分离校园失物招领系统详细设计

基于JavaSpringMVCvueelement实现前后端分离校园失物招领系统详细设计 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收…

Vue3+TS+Vite 找不到模块“@/components/xxx/xxx”或其相应的类型声明

引入vue文件时文件是存在的,引入路径也是对的,报找不到模块,有一些解决方案是在tsconfig.json里面做一些配置,大家可以自行百度(不知道是不是我百度的不对,我的没有解决)还有一种是在项目根目录…