【发布时间】:2017-09-12 05:21:45
【问题描述】:
我正在 python 的某个类中编写一个函数,人们建议我在这个函数中添加一个 @classmethod 装饰器。
我的代码:
import random
class Randomize:
RANDOM_CHOICE = 'abcdefg'
def __init__(self, chars_num):
self.chars_num = chars_num
def _randomize(self, random_chars=3):
return ''.join(random.choice(self.RANDOM_CHOICE)
for _ in range(random_chars))
建议的更改:
@classmethod
def _randomize(cls, random_chars=3):
return ''.join(random.choice(cls.RANDOM_CHOICE)
for _ in range(random_chars))
我几乎总是只使用_randomize 函数。
我的问题是:在函数中添加 classmethod 装饰器有什么好处?
【问题讨论】:
-
它更清楚地表明该方法不使用来自实例的任何状态,通常命名为
self。这也意味着您可以在不创建实例的情况下在类上对其进行测试。 -
另外,如果这个类不包含太多其他内容,最好使用函数和
functools.partial()。也许吧。
标签: python decorator class-method