dot*_*hen 4 python oop constructor
如何正确拒绝在Python构造函数中创建对象?考虑一个对象:
class Triangle:
def __init__(self, a, b, c):
sides = [a, b, c]
sides.sort()
if sides[0]+sides[1] < sides[2]:
return None
self._a = a
self._b = b
self._c = c
Run Code Online (Sandbox Code Playgroud)
如果三角形的边不合逻辑,我想拒绝创建三角形对象.返回None不会阻止Triangle对象的创建,并且返回False会抛出异常.处理这个问题的正确方法是什么?当给出错误的参数时,我应该抛出某种类型的异常吗?
提出异常
class Triangle:
def __init__(self, a, b, c):
sides = [a, b, c]
sides.sort()
if sides[0]+sides[1] < sides[2]:
raise ValueError('invalid triangle!')
self._a = a
self._b = b
self._c = c
Run Code Online (Sandbox Code Playgroud)
或使用断言(自身引发异常)
class Triangle:
def __init__(self, a, b, c):
sides = [a, b, c]
sides.sort()
assert sides[0]+sides[1] >= sides[2]
self._a = a
self._b = b
self._c = c
Run Code Online (Sandbox Code Playgroud)
哪一个更合适取决于抛出无效值是否应该是您的API(第一个版本)的一部分,或者仅仅是为了帮助查找程序员错误(第二个版本,因为如果您将-O"优化"标志传递给python解释器).