【问题标题】:How to use default value for input, which is a member of self (Python)? [duplicate]如何使用输入的默认值,它是自我(Python)的成员? [复制]
【发布时间】:2015-02-15 13:40:36
【问题描述】:

假设我有一些类c,我想创建一个函数f,它获取一个参数,如果没有给出默认为self.x。即

class c:
   def __init__(self, x):
      self.x = x
   def f(self, n = self.x):
      ...

但是,这似乎不起作用 (name 'self' is not defined)。

这个问题有解决方案还是不能使用成员作为函数的默认值?

一个简单的解决方案是这样的:

def f(self, n = None):
   if (n is None):
      n = self.x

但我想知道是否可以避免它。

【问题讨论】:

    标签: python function class arguments default-value


    【解决方案1】:

    函数默认值是在构建类时确定的,而不是在调用方法时确定的。那时没有可用于默认的实例,没有。

    您将必须在此处使用哨兵默认值,使用 None 作为哨兵,就像您使用最常用的解决方案一样。

    如果应该可以将None 指定为n 的值,请使用不同的单例对象:

    _sentinel = object()
    
    class C:
       def __init__(self, x):
          self.x = x
    
       def f(self, n=_sentinel):
          if n is _sentinel:
              n = self.x
    

    【讨论】:

      猜你喜欢
      • 2021-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-11
      • 1970-01-01
      • 2013-08-20
      • 2011-04-10
      • 2011-10-02
      相关资源
      最近更新 更多