decorator:为什么要在python中使用类方法?

本问题已经有最佳答案,请猛点这里访问。

我正在python的某个类中编写一个函数,有人建议我在这个函数中添加一个@classmethod装饰器。

我的代码:

1
2
3
4
5
6
7
8
9
10
11
12
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))

建议的改变:

1
2
3
4
    @classmethod
    def _randomize(cls, random_chars=3):
        return ''.join(random.choice(cls.RANDOM_CHOICE)
                       for _ in range(random_chars))

我几乎总是只使用_randomize函数。

我的问题是:向classmethod装饰器添加函数有什么好处?


如果您看到_randomize方法,您没有在其中使用任何实例变量(在init中声明),而是使用了一个类var,即RANDOM_CHOICE = 'abcdefg'

1
2
3
4
5
6
7
8
9
10
11
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))

这意味着,您的方法可以不作为实例方法而存在,并且您可以直接在类上调用它。

1
  Randomize._randomize()

现在,问题来了,它有什么好处吗?

我想是的,你不需要创建一个实例来使用这个方法,它会有开销。

1
2
ran = Randomize() // Extra steps
ran._randomize()

您可以在这里阅读更多关于类和实例变量的信息。