用默认值初始化方法的参数
发布于 2021-01-29 19:27:39
如果未将显式值传递给方法,我想用一些默认值初始化方法的参数-像这样:
class Example
def __init__(self, data = self.default_data()):
self.data = data
def default_data():
# ....
return something
我得到了错误:
NameError: name 'self' is not defined
我该如何解决?
关注者
0
被浏览
192
1 个回答
-
这里常见的习惯用法是将默认值设置为一些哨兵值用于此目的,这是典型值,然后您可以检查该值。
class Example(object): #inherit from object. It's just a good idea. def __init__(self, data = None): self.data = self.default_data() if data is None else data def default_data(self): #probably need `self` here, unless this is a @staticmethod ... # .... return something
您可能还会看到
object()
用于哨兵的实例。SENTINEL = object() class Example(object): def __init__(self, data = SENTINEL): self.data = self.default_data() if data is SENTINEL else data
后一个版本的优点是可以传递
None
给函数,但有一些缺点(请参见下面@larsmans的评论)。如果您不认为需要将None
有意义的参数传递给您的方法,那么我建议您使用它。