Почему я должен использовать classmethod в python? [дубликат]
На этот вопрос уже есть ответ здесь:
- значение @classmethod и @staticmethod для начинающих? 11 ответов
- какова цель методов класса? 15 ответов
Я пишу функцию в каком-то классе на python, и люди предложили мне добавить к этой функции декоратора.
Мой код:
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
?
1 ответ:
Если вы видите метод
_randomize
, Вы не используете в нем переменную экземпляра (объявленную в init), но он использует классvar
, т. е.RANDOM_CHOICE = 'abcdefg'
.Это означает, что ваш метод может существовать, не будучи методом экземпляра, и вы можете вызвать его непосредственно в классе.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))
Теперь возникает вопрос, есть ли у него какие-либо преимущества?Randomize._randomize()
Я думаю, да, вам не нужно проходить через создание экземпляра, чтобы использовать этот метод, который будет иметь накладные расходы.
ran = Randomize() // Extra steps ran._randomize()
Вы можете прочитать больше о классе и переменной экземпляраздесь .