Initialize parameter of method with default value

前端 未结 1 898
清酒与你
清酒与你 2020-11-27 22:16

I would like to initialize a method\'s parameter with some default value if an explicit value was not passed into the method - something like this:

class Exa         


        
相关标签:
1条回答
  • 2020-11-27 22:39

    The common idiom here is to set the default to some sentinel value (None is typical, although some have suggested Ellipsis for this purpose) which you can then check.

    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
    

    You might also see an instance of object() used for the sentinel.

    SENTINEL = object()
    class Example(object):
       def __init__(self, data = SENTINEL):
          self.data = self.default_data() if data is SENTINEL else data
    

    This latter version has the benefit that you can pass None to your function but has a few downsides (see comments by @larsmans below). If you don't forsee the need to pass None as a meaningful argument to your methods, I would advocate using that.

    0 讨论(0)
提交回复
热议问题