当前位置: 首页 > news >正文

python @classmethod装饰器作用 与 使用 类方法 实例方法

1 表示是类方法, 类方法可以修改类变量, 实例方法不能修改类变量

类方法可以访问和修改类变量(也称为类属性)。这是实例方法做不到的,因为实例方法只能访问和修改实例变量(也称为实例属性)

1.1 例子

class MyClass:my_var = 10  # 这是一个类变量@classmethoddef increment(cls):cls.my_var += 1  # 修改类变量的值print(MyClass.my_var)  # 输出 10
MyClass.increment()  # 调用类方法
print(MyClass.my_var)  # 输出 11

1.2 例子

class MyClass:# 类变量(类属性)class_var = 0def __init__(self):# 实例变量(实例属性)self.instance_var = 0# 实例方法def modify_instance_var(self, new_value):self.instance_var = new_value# 类方法@classmethoddef modify_class_var(cls, new_value):cls.class_var = new_value

在这个例子中,modify_instance_var是一个实例方法,可以修改实例变量instance_var。你需要创建一个MyClass的实例才能调用这个方法:

my_instance = MyClass()
my_instance.modify_instance_var(100)
print(my_instance.instance_var)  # 输出 100

另一方面,modify_class_var是一个类方法,可以修改类变量class_var。你可以直接通过MyClass类调用这个方法,无需创建实例:

MyClass.modify_class_var(200)
print(MyClass.class_var)  # 输出 200

请注意,尽管你可以通过实例访问类变量,但是如果你试图通过实例修改类变量,实际上会创建一个新的实例变量,而不会影响类变量。例如:

my_instance.class_var = 300
print(my_instance.class_var)  # 输出 300
print(MyClass.class_var)  # 输出 200,没有改变

在这个例子中,my_instance.class_var = 300并没有改变MyClass.class_var,而是在my_instance中创建了一个新的实例变量class_var。

当你运行my_instance.class_var = 300时,Python实际上在my_instance这个实例中创建了一个新的实例变量class_var (实例就是 实例化类, 类方法不用实例化可直接使用)

1.3 def __init__(self) 作用

 def __init__(self):# 实例变量(实例属性)self.instance_var = 0
'''
__init__是一个特殊的方法,被称为类的构造函数。
当你创建一个类的实例时,Python会自动调用这个方法。
这个方法通常用于设置实例变量(也称为实例属性)。在__init__方法中,
你可以通过self.variable_name = value的形式来设置实例变量。
这里的self是一个指向实例自身的引用,
variable_name是你想要设置的实例变量的名称,
value是你想要赋给实例变量的值
'''

1.4 为什么用cls 不用self? 只能用self 或cls 能不能自定义?

都可以,也可以自定义

在Python中,self和cls只是约定俗成的命名,
它们没有特殊的含义。self通常用作实例方法的第一个参数,
表示类的实例,而cls通常用作类方法的第一个参数,表示类本身。当我们使用@classmethod装饰器定义类方法时,
第一个参数是类,而不是实例。因此,我们通常将这个参数命名为cls,
以区别于实例方法的第一个参数self。虽然你可以选择任何你喜欢的名称作为参数名,
但是使用cls和self可以让其他开发者更容易理解你的代码。
因为这是一种广泛接受的命名约定,大多数Python开发者都会遵循这个约定。完全可以自定义这个参数的名称。
Python并没有强制你必须使用self或cls。
这两个词只是Python社区中的约定俗成的命名,用于提高代码的可读性和一致性。
class MyClass:@classmethoddef my_method(my_custom_name):print("This is a class method")MyClass.my_method()

不需要实例化就能调用的方法

class MathUtils:@classmethoddef add(cls, a, b):return a + bresult = MathUtils.add(1, 2)  # 直接通过类调用方法,无需创建实例
print(result)  # 输出 3

2.1 需要实例化使用

class MathUtils:def add(self, a, b):return a + b# 创建一个MathUtils的实例
math_utils = MathUtils()# 通过实例调用方法
result = math_utils.add(1, 2)
print(result)  # 输出 3

2.2 不用实例化

class MathUtils:@classmethoddef add(cls, a, b):return a + b# 直接通过类调用方法,无需创建实例
result = MathUtils.add(1, 2)
print(result)  # 输出 3

可以被子类覆盖

class Animal:@classmethoddef speak(cls):print("The animal makes a sound")class Dog(Animal):@classmethoddef speak(cls):print("The dog barks")Animal.speak()  # 输出 "The animal makes a sound"
Dog.speak()     # 输出 "The dog barks"

3.1 class Dog(Animal) 这种写法表示Dog 是Animal的子类

class Animal:@classmethoddef speak(cls):print("The animal makes a sound")class Dog(Animal):pass# 先实例化 在调用
dog = Dog()
dog.speak()# 直接通过Dog类调用speak方法 用类方法 修饰符
Dog.speak()

相关文章:

python @classmethod装饰器作用 与 使用 类方法 实例方法

1 表示是类方法, 类方法可以修改类变量, 实例方法不能修改类变量 类方法可以访问和修改类变量(也称为类属性)。这是实例方法做不到的,因为实例方法只能访问和修改实例变量(也称为实例属性) 1.1 例子 class MyClass:…...

layui form 中input输入框长度的统一设置

Layui.form中使用class"layui-input-inline"就可轻松将元素都放到一行,但如果元素过多,就会自动换行。那就需要手动设置input框的长度。 像这种情况: 其实只需要添加css样式就可修改了 .layui-form-item .layui-input-inline {wid…...

【WSL/WSL 2-Redis】解决Windows无法安装WSL Ubuntu子系统与Redis安装

前言 在现代计算环境中,开发人员和技术爱好者通常需要在不同的操作系统之间切换,以便利用各种工具和应用程序。在这方面,Windows用户可能发现WSL(Windows Subsystem for Linux)是一个强大的工具,它允许他们…...

数据结构(四)--队列及面试常考的算法

一、队列介绍 1、定义 与栈相似,队列是另一种顺序存储元素的线性数据结构。栈与队列的最大差别在于栈是LIFO(后进先出),而队列是FIFO,即先进先出。 2、优缺点及使用场景 优点:先进先出(FIFO&…...

PMIC、电源管理MAX77646ANP、MAX77647AANP、MAX77675AEWE、MAX77847AEWL DC-DC 开关稳压器

一、MAX77646ANP、MAX77647AANP 低IQ SIMO PMIC支持原电池应用的1.8V工作电压 MAX77646/MAX77647为尺寸和效率至关重要的低功耗应用提供电源解决方案。该IC集成单电感多输出(SIMO)降压/升压稳压器,可通过单个电感提供三个可独立编程的电源轨,尽可能地减…...

5W2H分析法:全面思考和解决问题的实用工具

5W2H分析法又叫七问分析法,创于二战中美国陆军兵器修理部。发明者用五个以W开头的英语单词和两个以H开头的英语单词进行设问,发现解决问题的线索,寻找发明思路,进行设计构思,从而搞出新的发明项目。5W2H简单、方便&…...

01 向量基本概念

向量基本概念 向量是什么物理专业学生视角计算机专业学生视角数学家视角 不同视角之间的关系 这是关于3Blue1Brown "线性代数的本质"的学习笔记。 向量是什么 物理专业学生视角 向量是空间中的箭头。向量的长度和方向确定一个向量。只要长度和方向相同&#xff0c…...

QMS质量检验管理|攻克制造企业质量检验难题,助力企业提质增效

在日益激烈的市场竞争中,对产品质量严格把关,是制造企业提高核心竞争力与品牌价值的关键因素。那如何高效、高质地完成产品质检工作?这就需要企业在工业质检中引进数字化技术加以辅助,进而推动智能制造高质量发展。 蓝库云QMS质量…...

Visual Components Robotics OLP解决方案 北京衡祖

Visual Components 引入了“Visual Components Robotics OLP”的重大升级,合并了制造模拟和机器人离线编程。该解决方案利用 Delfoi Robotics 的技术,提高生产率、减少停机时间并减少浪费。 一、探索下一代离线机器人编程软件 自 1999 年以来&#xff0…...

React——简便获取经纬度信息

引言 在现代的Web应用程序中,获取用户的地理位置信息是一项常见的需求。通过获取经纬度信息,我们可以为用户提供个性化的服务和定位功能。在本文中,我们将介绍如何在React应用程序中简便地获取用户的经纬度信息,并提供相应的代码…...

如何修改设置360浏览器内核模式

360安全浏览器现有两种内核模式,即“极速模式”和“兼容模式” 极速模式 “极速模式”是以Blink(Webkit)为内核的浏览模式,Blink内核具有更高的网页浏览速度和更好网页渲染效果。但由于少部分网银、政府、税务、办公系统等网站对B…...

spring boot 定时任务@Scheduled(cron = ““)不可用时并且注入失败时——笔记

以下方案是本人使用定时任务时Service注入失败的解决方案 在 Spring Boot 中执行定时任务时,你可以注入并直接调用 Service 中的方法,就像在普通的业务逻辑中一样。 以下是执行定时任务时调用 Service 的步骤: 创建一个 Service 类&#xf…...

R语言用jsonlite库写的一个图片爬虫

以下是一个使用R语言和jsonlite库下载图片的程序。首先,我们需要导入jsonlite库和options()函数,然后将代理服务器的主机名和端口号设置为"duoip"和"8000"。接着,我们将URL设置为"https://yun.baidu.com/"&…...

Linux多线程编程- pthread_self()

pthread_self() 函数是 POSIX 线程库的一部分,它提供了一个非常简单的功能:获取当前线程的唯一标识符。这个标识符是 pthread_t 类型的,通常是一个无符号的长整型值,不过具体的类型是由实现定义的,这意味着它可以在不同…...

APM建设踩了哪些坑?去哪儿旅行分布式链路追踪系统实践

一分钟精华速览 分布式链路追踪系统在企业的APM体系中扮演着重要的角色。本文分享了去哪儿旅行构建分布式链路追踪系统的实践经验。从APM整体架构设计入手,讲述了日志收集、Kafka传输和Flink任务处理等环节的性能优化实践和踩坑经验。 同时,作者结合丰…...

ASTM F963-23美国玩具安全新标准发布

新标准发布 2023年10月13日,美国材料与试验协会(ASTM)发布了新版玩具安全标准ASTM F963-23。 主要更新内容 与ASTM F963-17相比,此次更新包括:单独描述了基材重金属元素的豁免情况,更新了邻苯二甲酸酯的管控…...

swift语言下SurfGen库做的爬虫是什么样的 ?

Swift语言并没有内置的爬虫库,但是你可以使用第三方库来实现爬虫功能。其中比较常用的是Alamofire和SwiftyJSON。Alamofire是一个基于Swift语言的HTTP网络库,可以用来发送HTTP请求和接收HTTP响应。而SwiftyJSON则是一个用于处理JSON数据的Swift库&#x…...

Vue纯CSS实现掷色子

效果图&#xff1a; 实现代码 直接利用CSS3动画实现的效果&#xff0c;无js代码。 <template><div class"wrap"><input type"checkbox" id"roll"><label for"roll"><div class"content"><…...

使用vscode开发uniapp项目常用的辅助插件,提升开发效率

为什么不使用hbuilder开发呢&#xff1f;因为hbuilder对ts和vue3语法支持并不友好&#xff0c;而且代码提示不智能&#xff0c;也不能使用最近很流行的coplit和CodeGeex智能提示&#xff0c;所以就换掉hbulider&#xff0c;使用我们熟悉的vscode开发吧。 第一个&#xff1a;un…...

python脚本监听域名证书过期时间,并将通知消息到钉钉

版本一&#xff1a; 执行脚本带上 --dingtalk-webhook和–domains后指定钉钉token和域名 python3 ssl_spirtime.py --dingtalk-webhook https://oapi.dingtalk.com/robot/send?access_tokenavd345324 --domains www.abc1.com www.abc2.com www.abc3.com脚本如下 #!/usr/bin…...

苹果手机快速开启开发者模式教程(iOS 16+)

在Mac Xcode 给 iPhone 安装自签 IPA、做苹果 App 打包测试时,iOS 16 及以上的系统第一次启动这类"非 App Store 来源"的 App,都会弹一个 “需要启用开发者模式” 的提示,点"好"就退出了,App 根本进不去。 这是苹果从 iOS 16 开始加的安全限制:任何用开发…...

2026企业网盘怎么选?十大产品深度测评:从合规到协作一次讲清

企业网盘已经不只是“存文件”这么简单了。2026年&#xff0c;远程办公常态化、数据合规持续收紧、企业开始把“文件”当作数字资产来治理——网盘也从“云端U盘”进化为企业数字资产管理的底座。 过去选网盘&#xff0c;很多企业只看容量和价格&#xff1b;现在真正拉开差距的…...

YOLO格式标注避坑指南:用labelImg时,你的classes.txt文件生成对了吗?

YOLO格式标注避坑指南&#xff1a;labelImg中classes.txt的隐藏逻辑与实战解决方案 在计算机视觉项目的实际开发中&#xff0c;数据标注的质量往往直接决定了模型性能的上限。许多团队花费大量时间标注数据后&#xff0c;却在模型训练阶段遭遇"标签ID不匹配"、"…...

【限时解密】ElevenLabs未公开的马来文SSML扩展语法:支持“Johor-Riau变体”、“Kedah重音标记”及连读停顿控制

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs马来文语音合成的技术演进与本地化挑战 ElevenLabs自2022年推出多语言TTS服务以来&#xff0c;持续扩展其语音模型对东南亚语言的支持能力。马来文&#xff08;Bahasa Melayu&#xff09;作为…...

ElevenLabs缅甸文TTS落地难题全拆解:从音素对齐失败到语调失真,3步精准修复

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs缅甸文TTS落地难题的根源认知 ElevenLabs官方API当前未原生支持缅甸文&#xff08;Burmese, my-MM&#xff09;&#xff0c;其语音合成模型训练语料库中缺乏足够规模、高质量、带韵律标注的缅…...

【文档编辑】打印小册子(一张A4纸4页内容)步骤

效果如下&#xff0c;使用“A4纸”打印变成“每一页是A5大小的翻页小册子”1、打开word格式说明书&#xff0c;另存为pdf格式&#xff08;如果文件是pdf格式忽略步骤1&#xff09; 2、用wps打开pdf文件 3、打印→打印方式&#xff1a;小册子→小册子子集&#xff1a;仅正面→装…...

如何在5分钟内掌握ToolsFx密码学工具箱:新手完全指南

如何在5分钟内掌握ToolsFx密码学工具箱&#xff1a;新手完全指南 【免费下载链接】ToolsFx 跨平台密码学工具箱。包含编解码&#xff0c;编码转换&#xff0c;加解密&#xff0c; 哈希&#xff0c;MAC&#xff0c;签名&#xff0c;大数运算&#xff0c;压缩&#xff0c;二维码功…...

终极指南:免费实现Zwift离线骑行模拟的完整方案

终极指南&#xff1a;免费实现Zwift离线骑行模拟的完整方案 【免费下载链接】zwift-offline Use Zwift offline 项目地址: https://gitcode.com/gh_mirrors/zw/zwift-offline 想要在没有网络连接的情况下享受Zwift专业骑行训练吗&#xff1f;Zwift-Offline开源项目为你提…...

MailHog邮件测试工具:开发者的SMTP调试终极解决方案

MailHog邮件测试工具&#xff1a;开发者的SMTP调试终极解决方案 【免费下载链接】MailHog Web and API based SMTP testing 项目地址: https://gitcode.com/gh_mirrors/ma/MailHog 作为现代软件开发过程中不可或缺的一环&#xff0c;邮件功能测试常常让开发者头疼不已。…...

如何用Matlab SPOD工具快速分析流体动力学模态:完整指南

如何用Matlab SPOD工具快速分析流体动力学模态&#xff1a;完整指南 【免费下载链接】spod_matlab Spectral proper orthogonal decomposition in Matlab 项目地址: https://gitcode.com/gh_mirrors/sp/spod_matlab 你是不是经常面对海量的流体动力学数据感到无从下手&a…...