ここでの一般的なイディオムは、デフォルトをいくつかのセンチネル値に設定することです (これNone
は一般的ですが、この目的のために提案されているものもあります)。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
メソッドに意味のある引数として渡す必要がないと思われる場合は、それを使用することをお勧めします。