class 上永远不会实例化的 class 方法的 Python 编码标准是什么?

What is the Python coding standard for class methods on classes that will never be instantiated?

我正在读一本书,他们使用 Python class 作为容器将多个函数捆绑在一个组中。 class 永远不会被实例化。对于这个 class 中的方法,没有 clsself 参数(这让我很困惑)。由于我熟悉 classes(will/might 被实例化)和 @classmethods,我想知道是否有这些 classes 的名称和 PEP 指南永远不会被实例化?

可以通过将这些方法放在不同的文件而不是 class 中来实现相同的名称间距。但是可能有充分的理由为此目的更喜欢 class?

在下面的示例中,您可以看到方法 'addition' 和 'addition_2' 的行为相似,除了 class 将被实例化(当然)。 因此,在您 永远不会 实例化 class 的情况下,您似乎不需要 @classmethodcls 参数。但这是好的做法吗?

# python 3.8.5
class Operations:

    @classmethod
    def addition(cls, value, value_2):
        print(value + value_2)

    def addition_2(value, value_2):
        print(value + value_2)


Operations.addition(value=3, value_2=5)  # 8
Operations.addition(3, 5)  # 8
Operations().addition(value=3, value_2=5)  # 8
Operations().addition(3, 5)  # 8

Operations.addition_2(value=3, value_2=5)  # 8
Operations.addition_2(3, 5)  # 8

# expected errors:
Operations().addition_2(value=3, value_2=5)  # TypeError: addition_2() got multiple values for argument 'value'
Operations().addition_2(3, 5)  # TypeError: addition_2() takes 2 positional arguments but 3 were given

你可以有一个 class,它永远不会被实例化,只是一个函数的容器:

class Operations:

    @staticmethod
    def addition(value, value_2):
        print(value + value_2)

    @staticmethod
    def subtraction(value, value_2):
        print(value + value_2)

然而,正如其他人所说,这并不是真正的最佳实践,您可以将这些函数存储在不同的模块中,即一个名为 operations 的 .py 文件,您可以通过导入它来使用它:

import operations

operations.addition(1, 2)