我正在编写一个类方法,如果没有提供其他值,我想使用类变量
def transform_point(self, x=self.x, y=self.y):
但是……这似乎不起作用:
NameError: name 'self' is not defined
我觉得有一种更聪明的方法可以做到这一点.你会怎么做?
解决方法:
您需要使用sentinel值,然后将其替换为具有所需实例属性的值.没有一个好的选择:
def transform_point(self, x=None, y=None):
if x is None:
x = self.x
if y is None:
y = self.y
请注意,函数签名只执行一次;您不能将表达式用于默认值,并期望每次调用函数时都会更改这些值.
如果必须能够将x或y设置为None,则需要使用不同的唯一单一值作为默认值.在这种情况下,使用object()的实例通常是一个伟大的哨兵:
_sentinel = object()
def transform_point(self, x=_sentinel, y=_sentinel):
if x is _sentinel:
x = self.x
if y is _sentinel:
y = self.y
现在你也可以调用.transform_point(无,无).
标签:python,class,default-value
来源: https://codeday.me/bug/20190823/1696053.html