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

python中@staticmethod、@classmethod用法

1、类的基础介绍

类对象:定义的类就是类对象

类属性:定义在__init__ 外部的变量

类方法:定义在类中,且被@classmethod 装饰的方法

实例对象:类对象实例化后就是实例对象

实例属性:定义在__init__内部带有self.的变量

实例方法:定义在类对象中,且未被@classmethod装饰的方法就是实例方法

静态方法:定义在类中,且被@staticmethod 装饰的方法

直观的解释见下图:

2、实例化方法 
class ExampleClass:class_variable = 10print('类属性:', class_variable)def class_method(cls, x):y = cls.class_variable + xreturn yexampleclass = ExampleClass()  #实例化
y = exampleclass.class_method(100)
print(y)

实例方法可以调用类属性和类方法。 

实例对象可以访问类属性、类方法、实例属性、实例方法 

3、@staticmethod静态方法

        静态方法不接收类的实例(self)或类(cls)作为第一个参数,不需要对类实例化,可以直接类名.方法名()被调用,但不能访问类属性或实例属性,不能访问实例属性和调用实例方法

class Func:@staticmethoddef add(x, y):return x + y# 使用静态方法
result = Func.add(3, 4)
34、 @classmethod用法

        无需实例化可以被直接调用,但是需要接受cls作为第一个参数传入。一旦实例方法前面被加了@classmethod,该实例方法的级别就从二级跃升到一级,与类是一个级别。(假设类是一级,类下面的实例方法是二级。)

        类方法不能调用实例属性和实例方法

class Vehicle:def __init__(self, vehicle_type):self.vehicle_type = vehicle_typeprint('初始化实例属性:',self.vehicle_type)@classmethoddef car(cls):print('类方法')return cls(10).test(100)def test(self, x):print('实例化方法:', self.vehicle_type + x)print(Vehicle.car())

 输出

类方法
初始化实例属性: 10
实例化方法: 110

代码的执行流程如下:

  1. Vehicle.car():类对象调用类方法。
  2. cls(10):其中cls代指类对象Vehicle,因此cls(10)代表Vehicle(10),相当于对Vehicle类进行了实例化。
  3. __init__:执行类实例化cls(10)时,程序会对实例化属性进行初始化self.vehicle_type = vehicle_type,此时self.vehicle_type=10。
  4. .test(100):实例化对象cls(10)调用实例化方法test(100),此时会执行实例化方法test()中的内容。
http://www.lryc.cn/news/436935.html

相关文章:

  • Harmony Next 文件命令操作(发送、读取、媒体文件查询)
  • Go语言中的链表与双向链表实现
  • 开始一个WPF项目时的记忆重载入
  • 用go语言实现树和哈希表算法
  • 基于SpringBoot+Vue+MySQL的校园健康驿站管理系统
  • 深入理解MATLAB中的事件处理机制
  • 线程--线程同步
  • 【QT】Qt窗口
  • 场外个股期权怎么给股票加杠杆?
  • 【Docker部署ELK】(7.15)
  • UE4_后期处理_后期处理材质及后期处理体积一
  • 【PyQt6 应用程序】基于QtDesigner做一个用户登录页面
  • Ollama—87.4k star 的开源大模型服务框架!!
  • MySQL表的操作与数据类型
  • mysql把某一个字段的值中的aa,替换成bb
  • 【系统架构设计师】原型模式详解
  • Spring @Async 深度解读:默认线程池执行器的配置与优化
  • 手把手教你用护核纪元地心护核者用服务器开服联机
  • Log4j 1.x如何升级到Log4j 2.x
  • CloudFlare问题与CDN问题
  • [Linux]:文件(上)
  • flutter开发多端平台应用的探索 下 (跨模块、跨语言通信之平台通道)
  • 第15-02章:理解Class类并获取Class实例
  • 【Authing身份云-注册安全分析报告-无验证方式导致安全隐患】
  • idea插件推荐之Cool Request
  • 从卫星和飞机等不同传感器方面由QGIS 遥感分析
  • 什么是AIGC?有哪些免费工具?
  • 腾讯云升级多个云存储解决方案 以智能化存储助力企业增长
  • Kubernetes 集群初步部署
  • 从源码到成品:直播美颜SDK与主播美颜工具的开发全流程