python中@classmethod和@staticmethod区别

Python中3种方式定义类方法, 常规方式, @classmethod修饰方式, @staticmethod修饰方式

常规方式这里不在赘述

@staticmethod不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样

@classmethod也不需要self参数,但第一个参数需要是表示自身类的cls参数

我们先看看例子

class test():
    x = 2
    def a(self, num):
        print(num)
    @staticmethod
    def b(num):
        print("static method: {}".format(num))

    @classmethod
    def c(cls, num):
        print("class method: {}".format(num))
        print(cls.x)
        cls().b(num)
        

print("*********************测试普通方法*********************")
obj = test()
obj.a(5)
print("*********************测试静态方法*********************")
test.b(4)
print("*********************测试类的方法*********************")
test.c(3)

打印结果

微信截图_20210207124733.jpg

上述例子我们可以看到,类中的普通方法使用时需要先实例化类称为对象,再可以通过对象调通类的方法

而静态方法,可以不用实例化直接通过classname.method(),这样直接使用,同时静态方法不用在方法参数中增加self关键字,类的方法相对普通方法只是将self关键字改为了cls,同时在使用类的方法时也可以不用实例化直接通过静态方式一样的调用方式来使用类中的方法

同时cls的使用方法和self类似,但是我发现,cls参数来调用类属性和类方法有点不一样,在调用方法时要写成函数样cls()


内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/663.html