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

Python 静态方法与类方法详解

Python 静态方法与类方法详解

  • 实例方法 vs 静态方法 vs 类方法
    • 实例方法
    • 静态方法(@staticmethod)
    • 类方法(@classmethod)
  • 静态方法 vs 类方法:区别总结
    • 访问权限
    • 装饰器
    • 使用场景

实例方法 vs 静态方法 vs 类方法

实例方法

这是最常见的类型,定义时以 self 作为第一个参数,表示方法属于类的某个具体实例,可以访问和修改该实例的属性。

class MyClass:def instance_method(self):print(f"This is an instance method. {self}")obj = MyClass()
obj.instance_method()  # 输出: This is an instance method. <__main__.MyClass object at 0x...>

静态方法(@staticmethod)

静态方法与类或实例无关,它更像是属于类的一个普通函数。静态方法的第一个参数不需要是 self 或 cls,它们不能访问类属性或实例属性。要定义一个静态方法,需要使用 @staticmethod 装饰器。

class MyClass:@staticmethoddef static_method():print("This is a static method.")# 调用静态方法
MyClass.static_method()  # 通过类调用
obj = MyClass()
obj.static_method()       # 通过实例调用

类方法(@classmethod)

类方法的特点是它第一个参数是 cls,表示它接收的是类本身,而不是类的实例。类方法可以访问类的属性和修改类的状态。它通常用于创建工厂方法或者对类属性进行操作。

class MyClass:class_var = "I am a class variable"@classmethoddef class_method(cls):print(f"This is a class method. {cls.class_var}")# 调用类方法
MyClass.class_method()  # 通过类调用
obj = MyClass()
obj.class_method()      # 通过实例调用

静态方法 vs 类方法:区别总结

访问权限

  • 静态方法无法访问类和实例的属性,它们只是一个普通的函数,被放置在类的命名空间中。
  • 类方法可以访问类的属性,并且可以修改类的状态。

装饰器

  • 静态方法使用 @staticmethod 装饰器。
  • 类方法使用 @classmethod 装饰器。

使用场景

  • 静态方法通常用于辅助功能或与类相关的逻辑,但不依赖于类的属性或实例属性。
  • 类方法用于访问和操作类的状态,常用于工厂方法、计数器等需要修改类属性的场景。
class MyClass:class_var = 0@staticmethoddef static_method():print(f"This is a static method. It cannot access class_var directly.")@classmethoddef class_method(cls):print(f"This is a class method. It can access class_var: {cls.class_var}")MyClass.static_method()  # This is a static method. It cannot access class_var directly.
MyClass.class_method()   # This is a class method. It can access class_var: 0

在这个例子中,静态方法无法访问 class_var,而类方法则能够访问并修改它。


http://www.mrgr.cn/news/46913.html

相关文章:

  • sql模糊关联匹配
  • 学习进程前的简单认知-体系结构与OS
  • 【Vue】Vue 拖拽指令 禁选文字 解决子元素 input 不能输入 、拖动粘连鼠标
  • PySpark用sort-merge join解决数据倾斜的完整案例
  • 微信小程序-Docker+Nginx环境配置业务域名验证文件
  • spark汇总
  • 全面了解入侵防御系统(IPS)原理
  • jdk 11.0.8 配置 classpath
  • 开源气象大模型的原理解析
  • 十年的代购经验总结一套完善的代购集运系统需要哪些功能必备哪些优势?
  • Vue打印网页pdf,并且有按钮调整缩小放大
  • SeaTunnel Web1.0.0安装
  • Unity转Unreal5之从入门到精通 Spline(样条曲线)组件的使用
  • 六西格玛设计DFSS方法论在消费级无人机设计中的应用——张驰咨询
  • 编程题 7-16 求符合给定条件的整数集【PAT】
  • LEAP模型的低碳路径建模与温室气体核算方法!详细
  • 大学的离散数学:探索数学的逻辑之美
  • R语言的Meta分析【全流程、不确定性分析】方法与Meta机器学习技术应用
  • 中国三大著名哲学家起名大师颜廷利:古人用智慧创造汉字
  • 在 CentOS 中,前台启动和后台启动是
  • 搭建企业域名服务器案例
  • 你用过最好用的AI工具有哪些?
  • clickhouse常用脚本语句
  • 用Python实现的高校教师资格考试题库程序
  • 【机器学习】金融预测 —— 风险管理与股市预测
  • 系统统异常和业务异常的区别