Ответ 1
Общая идиома здесь заключается в том, чтобы установить значение по умолчанию для некоторого значения часового (None
является типичным, хотя некоторые предложили Ellipsis
для этой цели), который вы можно проверить.
class Example(object): #inherit from object. It 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
в качестве осмысленного аргумента для ваших методов, я бы рекомендовал использовать это.