假设我想将类方法的参数的默认值设置为类的某个数据属性的值。这样做的适当方法是什么?有没有办法使用lambda函数来做到这一点?
以下是一些示例代码:
class A(object):
def __init__(
self
):
self._defaultReportText = "hello world"
def report(
self,
text = self._defaultReportText
):
return(text)
显然,方法text
的参数report
的默认值规范在此处不起作用,因为此时未定义self
。我应该如何提供这个值?
答案 0 :(得分:7)
如果我理解你的问题,我通常会这样做:
def report(self, text = None):
if text is None:
text = self._defaultReportText
return(text)
(编辑:在Warren Weckesser的建议之后将if not text
更改为if text is None
。)
答案 1 :(得分:4)
您无法在类定义时设置默认值,因为默认值与函数对象一起存储,因此没有实例可用于从中获取默认。
相反,请使用 sentinel ,这是一个您可以轻松测试的唯一值。通常这是None
:
class A(object):
def __init__(self):
self._defaultReportText = "hello world"
def report(self, text=None):
if text is None:
text = self._defaultReportText
return text
如果没有提供text
参数,则默认为None
,并且可以轻松测试。
如果None
应该是一个可能的值(例如,您希望能够使用A().report(None)
并且行为与A().report()
不同,那么您将不得不选择不同的哨兵在这种情况下,使用object()
的唯一实例来测试:
_sentinel = object()
class A(object):
def __init__(self):
self._defaultReportText = "hello world"
def report(self, text=_sentinel):
if text is _sentinel:
text = self._defaultReportText
return text
答案 2 :(得分:-1)
使用特殊值(如None
)的替代方法是使用类变量:
class A(object):
_defaultReportText = "hello world"
def report(self, text=_defaultReportText):
return text