在python中使用@classmethod除了创建一个可选的构造函数

Use of @classmethod in Python besides creating an alternate constructor

除了创建一个"overloaded"(我猜不是真的重载,因为方法名与init不同)构造函数之外,我还尝试考虑@classmethod特殊修饰器的用例,但是我想不出任何。

我已经查看了类似于什么是Python类方法的示例用例这样的文章?但只能找到指向备用构造函数的用例。

我可以想到的另一种情况是将一个方法与一个用于封装相关逻辑的类结合在一起(正如上面链接的post中@samplebias提到的那样),但我认为@staticmethod更适合将相关逻辑封闭到类中(就像有人在@samplebias的post上评论的那样)。

有人能帮我为这个特殊的装饰器识别一些额外的用例吗?


我用python在oop上浏览了一些资料,发现了一个@classmethod装饰器的用例,除了作为一个重载的构造函数。

当直接对类对象执行(更改)操作时,使用类方法是有意义的。例如,如果您有一个Employee对象和一个base_raise_factor作为类变量,那么在Employee上创建一个类方法来更改这个变量是有意义的。

你可以说我们可以直接把Employee.base_raise_factor设置为某个东西,但我认为最好坚持encapsulation,而不是直接修改内部。另外,我们可以在更新base_raise_factor的类方法中定义一些额外的逻辑。