53 - @classmethod 和@staticmethod 的用法和区别

请解释@classmethod 和@staticmethod 的用法和区别

  • 共同点
    • 都是用来声明静态方法的 类名.方法名
  • 区别
    • @staticmethod 不需要表示自身对象的self和自身类的cls参数,就像普通函数一样定义
    • @classmethod 也不需要self参数,但第二个参数需要是表示自身的cls参数,避免硬编码
class MyClass:
    bar = 1 # 静态变量
    def __init__(self):
        self.count = 20
        
    def process(self):
        print('process', self.count)
        
    @staticmethod
    def static_process():
        print('static_process')
        print(MyClass.bar)
        
    @classmethod
    def class_process(cls):
        print('class_process')
        print(cls.bar)
        print(cls)
        cls().process()
        print(cls().count)
        
print(MyClass.bar)
MyClass.static_process()
MyClass.class_process()
MyClass.bar = 123
MyClass.static_process()
1
static_process
1
class_process
1
<class '__main__.MyClass'>
process 20
20
static_process
123


54 - 元类(metaclass)的作用

发布了162 篇原创文章 · 获赞 184 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_29339467/article/details/104720814