如何使用输入的默认值,它是 self (Python) 的成员?

How to use default value for input, which is a member of self (Python)?

假设我有一些 class 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

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

函数默认值是在构建 class 时确定的,而不是在调用方法时确定的。那时没有可用的实例可以从中获取默认值,没有。

您将在此处使用哨兵默认值,使用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