除了创建备用构造函数之外,在Python中使用@classmethod

时间:2017-12-19 19:30:06

标签: python python-decorators

我试图考虑@classmethod特殊装饰器的用例,除了创建一个“重载”(我猜不会真的重载因为方法名称与 init 不同)构造函数,但是没想到。

我查看了What's an example use case for a Python classmethod?这样的帖子,但只能找到指向备用构造函数的用例。

我能想到的另一个案例是将一个方法与一个类结合起来封装相关逻辑(如上面链接的帖子中的@samplebias所述),但我认为@staticmethod更适合将相关逻辑封装到类中(正如某人对@samplebias的帖子发表了评论)。

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

1 个答案:

答案 0 :(得分:0)

我正在使用Python浏览OOP上的一些材料,并发现@classmethod装饰器的用例除了作为重载的构造函数。

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

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