我为什么要在python中使用classmethod?

时间:2017-04-16 12:15:06

标签: python decorator class-method

我在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装饰器添加到函数中有什么好处?

1 个答案:

答案 0 :(得分:5)

如果您看到_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()   
    

您可以阅读有关类和实例变量here的更多信息。

相关问题