@staticmethod,@classmethod与cls

@staticmethod,@classmethod与cls

Python实例方法:

def hello(self):
    pass

Pyhton类方法:

@classmethod
def hello(cls):
    pass

self所代表的其实是对象的指针,它可以指向任意一个对象。在实例化对象的时候self就会变成对象实例。

cls所代表的东西代表的其实是一个类本身,它可以用来调用类自己的属性和类自己的方法。

cls代表类本身而self是对象的指针

比较一般类方法中的self和cls的区别:一般来说,使用某个类的方法,需要先将类实例化,赋予一个对象才可以调用类中的方法,但是如果使用了@staticmethod 或@classmethod,就可以不用实例化,直接类名.方法名()来调用。这有利于组织代码,把某些应该属于某个类的函数给放到那个类里去,同时有利于命名空间的整洁。

使用实例:

from dataclasses import dataclass, field
from typing import Any
@dataclass
class Hello():
    a = 1
​
    def __init__(self, b=2, c=3):
        self.b = b
        self.c = c
​
    def h1(self):
        print('hello h1')
        print("b:{},c:{}".format(self.b, self.c))
​
    @classmethod
    def h2(cls):
        print('hello h2')
        print(cls.a)  ##获取类的属性a
        cls().h1()  ##获取类的方法
        cls(4, 5).h1()  ##获取类的方法,并初始化参数
        return cls(7,8)
    @staticmethod
        def h3():##不需要cls
            
            print("hello h3")
​
​
if __name__ == "__main__":
​
    hello = Hello()
    print("+"*20,'hello','+'*20)##对象调用
    hello2 = hello.h2()
    print("+" * 20, 'hello2', '+' * 20)##类调用
    hello2.h2()
    print("+" * 20, 'hello3', '+' * 20)##类调用
    hello2.h3()
    pass

输出:


++++++++++++++++++++ hello ++++++++++++++++++++
hello h2
1
hello h1
b:2,c:3
hello h1
b:4,c:5
++++++++++++++++++++ hello2 ++++++++++++++++++++
hello h2
1
hello h1
b:2,c:3
hello h1
b:4,c:5
++++++++++++++++++++ hello3 ++++++++++++++++++++
hello h3
​
​

Refer

答疑《python的CLS》

python cls方法关于类方法中的cls令狐星尘的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值