在构造函数中,如果它们都是raise或者两者都是None,那么ValueError就足够简单了。问题就在后面的代码中。在
遵循最小意外原则,我认为您应该将变量标记为私有并使用setter方法(而不是属性setter,普通的老方法)。如果你想增加一个额外的逻辑,你可以在以后的逻辑中加上一个额外的逻辑。不过,使用getter属性方法也可以。所以像这样:class Foo(object):
def __init__(self, apple=None, orange=None):
super(Foo, self).__init__()
if apple is None and orange is None:
raise ValueError('apple and orange cannot both be None')
if apple is not None and orange is not None:
raise ValueError('apple and orange cannot both be set')
self._apple = apple
self._orange = orange
@property
def apple(self):
return self._apple
@property
def orange(self):
return self._orange
def setAppleClearOrange(self, value):
if value is None:
raise ValueError('Cannot set both to None')
self._orange = None
self._apple = value
def setOrangeClearApple(self, value):
if value is None:
raise ValueError('Cannot set both to None')
self._apple = None
self._orange = value
是的,有点冗长,但很明显你的意图是什么,这实际上更重要。在