对于类的方法,我想要以下行为
>>class A:
>> def __init__(self, x):
>> self.x = x
>> def func(self, x = self.x):
>> print(x)
>>a = A(5)
>>a.func(2)
2
>>a.func()
5
但是我在func()
:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 4, in A
NameError: name 'self' is not defined
是否有推荐的方法来实现此行为?
答案 0 :(得分:3)
使用哨兵值; None
通常就足够了。
class A:
def __init__(self, x):
self.x = x
def func(self, x=None):
if x is None:
x = self.x
print(x)
如果出于某种原因,None
可能是一个有效的参数,你可以创建自己的哨兵。
_sentinel = object()
class A:
def __init__(self, x):
self.x = x
def func(self, x=_sentinel):
if x is _sentinel:
x = self.x
print(x)
答案 1 :(得分:2)
您不能在函数声明中引用self
,因为此时self
确实不存在(如错误所示)。惯用的方式是:
def func(self, x = None):
if x is None:
x = self.x
print(x)
或者也许:
def func(self, x = None):
print(x or self.x)
(虽然请注意 falsey 与None
不同,因此可能会有不同的行为。)