【发布时间】:2020-03-27 14:24:47
【问题描述】:
我是 Python 中的 OOP 新手,假设我有一个可以进行简单计算的类:
class Calc:
def __init__(self, n1, n2):
self.n1 = n1
self.n2 = n2
def sum(self):
return self.n1 + self.n2
在这个简化的示例中,验证类属性的最佳方法是什么?例如,假设我期望 n1 和 n2 有一个 float,这样我将构造函数定义为:
self.n1 = float(n1)
self.n2 = float(n2)
如果 n1 或 n2 是 None 我会收到属性错误,因为 NoneType 不能是 float - 出于某种原因,我们在Calc 类的构造函数来捕获这个。
在创建类的实例以在上游捕获它之前,我是否需要某种验证逻辑?
有没有办法让我使用一些技术来动态验证,比如装饰器或属性注释?
感谢任何建议
【问题讨论】:
-
啊谢谢@balderman 我知道这与
properties有关 -
你想要什么样的行为?你只是想告诉客户你的代码你期望什么类型,如果他们搞砸了,那是他们的错吗?你想强制你得到正确的类型吗?如果给出了错误的值,您是否想默默地选择一个默认值(正如您在
None上的注释所暗示的那样)?您是否只想对传递给构造函数的参数或任何属性分配进行验证?您想要静态验证还是动态验证? -
所有有效问题,我从答案中获得了足够的信息,可以继续前进:)
标签: python python-3.x oop