Python3 中类的静态方法、普通方法、类方法

静态方法: 用 @staticmethod 装饰的不带 self 参数的方法叫做静态方法,类的静态方法可以没有参数,可以直接使用类名调用。

普通方法: 默认有个self参数,且只能被对象调用。

类方法: 默认有个 cls 参数,可以被类和对象调用,需要加上 @classmethod 装饰器。

class Classname:
    @staticmethod
    def fun():
        print('静态方法')

    @classmethod
    def a(cls):
        print('类方法')

    # 普通方法
    def b(self):
        print('普通方法')

Classname.fun()
Classname.a()

C = Classname()
C.fun()
C.a()
C.b()

输出为:

静态方法
类方法
静态方法
类方法
普通方法

“self”应是实例方法的第一个参数,“cls”应是类方法的第一个参数,这是Python语言常规约定。

类的方法不需要访问实例时,使用普通的实例方法定义虽然可以实现功能,但会在使用时要求必须由类 的实例调用此方法。这就造成使用过程中一次冗余的实例生成、回收过程,代码本身编写和阅读时也显 得冗余。
因此,在类的方法不需要访问实例时,根据以下场景将方法定义为类方法或静态方法:
1). 在不需要访问实例,需要访问类属性或方法时,建议使用 @classmethod 将方法定义为类方法;
2). 在不需要访问实例也不需要访问类属性或方法时,建议使用 @staticmethod 将方法定义为静态方法

class MyClass:
    class_attr = "MyClass.class_attr"

    def __init__(self):
        self.x = 100
        self.y = 200

    @classmethod
    def refresh_class_attr(cls, string_value: str):
        cls.class_attr = string_value
        return cls.class_attr

    @staticmethod
    def add_value(a, b):
        return a + b

    def mul_value(self):
        return self.x*self.y
  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值