Python@classmethod-is';cls&x27;只是编码风格的要求?

Python@classmethod-is';cls&x27;只是编码风格的要求?,python,class-method,Python,Class Method,这两者的区别在哪里: class Dummyclass: value = 4 def dummymethod(value): Dummyclass.value = value Dummyclass.dummymethod(31) 以及: 除了有一个@classmethod?之外,区别在于: 如果没有decorator,您可以调用DummyClass.dummymethod(42),但不能调用DummyClass().dummymethod(42)(因为后者返

这两者的区别在哪里:

class Dummyclass:
    value = 4
    def dummymethod(value):
        Dummyclass.value = value

Dummyclass.dummymethod(31)
以及:

除了有一个
@classmethod

之外,区别在于:

  • 如果没有decorator,您可以调用
    DummyClass.dummymethod(42)
    ,但不能调用
    DummyClass().dummymethod(42)
    (因为后者返回一个绑定方法,该方法试图将
    self
    作为第一个参数传递)。对于装饰者,两者的行为都是一样的
  • 如果您继承这个类并对子类调用
    dummymethod
    ,而不使用decorator,那么您将始终只操作
    Dummyclass
    ;使用decorator时,您将收到子类作为参数,从而可以实现正确的继承

通过调用Classname.classmethodname,一切都可以正常工作。
class Dummyclass:
    value = 4
    @classmethod
    def dummymethod(cls, value):
        cls.value = value

Dummyclass.dummymethod(31)