Python @classmethod-'cls'只是编码风格的要求吗?

时间:2019-12-18 09:09:51

标签: python class-method

这之间有什么区别:

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

Dummyclass.dummymethod(31)

和:

class Dummyclass:
    value = 4
    @classmethod
    def dummymethod(cls, value):
        cls.value = value

Dummyclass.dummymethod(31)

除了有@classmethod吗?

1 个答案:

答案 0 :(得分:0)

区别是:

  • 没有装饰器,您可以调用DummyClass.dummymethod(42),但不能调用DummyClass().dummymethod(42)(因为后者返回一个绑定方法,该方法尝试将self作为第一个参数传递)。使用装饰器,两者的行为将相同。
  • 如果您继承此类并在子类上调用dummymethod,而没有修饰符,则您将始终仅操作Dummyclass;而使用decorator时,您将收到子类作为参数,从而可以实现适当的继承。