我有一个带有一个必需参数和两个可选参数的 class,以及一个 returns 带有一个可选参数的 repr 方法,以给定的参数为准
I have a class with one required and two optional parameters, and a repr method which returns with one of the optional params, whichever is given
class MyClass():
def __init__(self, name, high=None, low=None):
self.name = name
if low:
self.low = low
elif high:
self.high = high
else:
raise Error("Not found")
def __repr__(self):
value = self.low or self.high
return '{}({}, {})'.format(str(self), self.name, value)
我有一个单元测试用例,其中 MyClass 被实例化,
gain = MyClass('name', high='high_value')
assert isinstance(repr(gain), str)
但是当我的 repr() 被调用时,它抛出 AttributeError,
AttributeError: 'MyClass' has no attribute 'low'
我会将您的代码重构为以下内容
class MyClass:
def __init__(self, name, high=None, low=None):
self.name = name
self.low = low
self.high = high
if self.low is None and self.high is None:
raise Error("Not found")
if self.low is not None and self.high is not None:
raise Error("Only low OR high may be specified, not both")
def __repr__(self):
value = self.low if self.low is not None else self.high
return '{}({}, {})'.format(str(self), self.name, value)
因此,在 __init__
中,您的断言是 恰好设置了 low 或 high 之一,换句话说,没有设置或都没有设置是错误的。然后在 __repr__
中,您可以根据传入的内容分配 value
。在这种情况下,self.low
和 self.high
都将存在,尽管它们的值之一将是 None
.
class MyClass():
def __init__(self, name, high=None, low=None):
self.name = name
if low:
self.low = low
elif high:
self.high = high
else:
raise Error("Not found")
def __repr__(self):
value = self.low or self.high
return '{}({}, {})'.format(str(self), self.name, value)
我有一个单元测试用例,其中 MyClass 被实例化,
gain = MyClass('name', high='high_value')
assert isinstance(repr(gain), str)
但是当我的 repr() 被调用时,它抛出 AttributeError,
AttributeError: 'MyClass' has no attribute 'low'
我会将您的代码重构为以下内容
class MyClass:
def __init__(self, name, high=None, low=None):
self.name = name
self.low = low
self.high = high
if self.low is None and self.high is None:
raise Error("Not found")
if self.low is not None and self.high is not None:
raise Error("Only low OR high may be specified, not both")
def __repr__(self):
value = self.low if self.low is not None else self.high
return '{}({}, {})'.format(str(self), self.name, value)
因此,在 __init__
中,您的断言是 恰好设置了 low 或 high 之一,换句话说,没有设置或都没有设置是错误的。然后在 __repr__
中,您可以根据传入的内容分配 value
。在这种情况下,self.low
和 self.high
都将存在,尽管它们的值之一将是 None
.