如果没有将显式值传递给方法,我想用一些默认值初始化方法的参数 - 像这样:
class Example
def __init__(self, data = self.default_data()):
self.data = data
def default_data():
# ....
return something
我得到了错误:
NameError: name 'self' is not defined
我该如何解决这个问题?
最佳答案
这里的常见习惯用法是将默认值设置为某个标记值(None
是典型的,尽管 some have suggested Ellipsis
用于此目的),然后您可以检查。
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
作为有意义的参数传递给您的方法,我会提倡使用它。
关于python - 使用默认值初始化方法的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13075044/