如何使用输入的默认值,它是 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
假设我有一些 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