python - 永远不会实例化的类上的类方法的 Python 编码标准是什么?
问题描述
我正在读一本书,他们使用 Python 类作为容器将多个函数捆绑在一个组中。该类永远不会被实例化。对于此类中的方法,没有cls
或self
参数(这让我很困惑)。由于我熟悉类(将/可能被实例化)并且@classmethods
,我想知道这些永远不会被实例化的类是否有名称和 PEP 指南?
可以通过将这些方法放在不同的文件而不是类中来实现相同的名称间距。但是可能有充分的理由为此目的更喜欢一个类?
在下面的示例中,您可以看到方法“addition”和“addition_2”的行为相似,除非将实例化类(当然)。因此,在您永远不会实例化该类的情况下,您似乎不需要@classmethod
and参数。但这是好的做法吗?cls
# 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 Operations:
@staticmethod
def addition(value, value_2):
print(value + value_2)
@staticmethod
def subtraction(value, value_2):
print(value + value_2)
但是,正如其他人所说,这并不是真正的最佳实践,您可以将这些函数存储在不同的模块中,而不是一个名为操作的 .py 文件,您可以通过导入它来使用它:
import operations
operations.addition(1, 2)
推荐阅读
- nodes - 托管节点是否支持仅调用列入白名单的智能合约?
- html - 保持中心,但带来更接近的元素
- android - onActivityResult 不返回在物理设备上运行的 Intent
- angular - 如何使用 Angular 处理错误主体
- c# - 需要时获得依赖?
- javascript - 按数据键从高到低对 JSON 对象进行排序 - Javascript
- javascript - 时间计数器 - 打字稿
- c# - 为什么 performanceCounter 显示超过 100 %
- javascript - 如何检查多个变量是否为真?
- reactjs - 如何在反应原生中使用道具从大父组件到子组件的方法?