为什么要在python中使用类方法?[重复]


问题内容

这个问题已经在这里有了答案

@classmethod和@staticmethod对初学者的意义?[重复]

(12个答案)

类方法的目的是什么?
(18个回答)

3年前关闭。

我正在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装饰器添加功能有什么好处?


问题答案:

如果看到_randomize方法,则说明您没有在其中使用任何实例变量(在init中声明),而是在使用一个类,varRANDOM_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()

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