用默认值初始化方法的参数

发布于 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 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    这里常见的习惯用法是将默认值设置为一些哨兵值用于此目的,这是典型值,然后您可以检查该值。

    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有意义的参数传递给您的方法,那么我建议您使用它。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看