默认为python类方法中的类变量?

时间:2013-03-07 12:01:28

标签: python class default-value

我正在编写一个类方法,如果没有提供其他值,我想使用类变量

def transform_point(self, x=self.x, y=self.y):

但......似乎不起作用:

NameError: name 'self' is not defined

我感觉有一种更聪明的方法可以做到这一点。你会做什么?

2 个答案:

答案 0 :(得分:5)

您需要使用sentinel值,然后将其替换为具有所需实例属性的值。 None是个不错的选择:

def transform_point(self, x=None, y=None):
    if x is None:
        x = self.x
    if y is None:
        y = self.y

请注意,函数签名仅执行一次;你不能将表达式用于默认值,并期望每次调用函数时都会改变它们。

如果 能够将xy设置为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(None, None)

答案 1 :(得分:2)

def transform_point(self, x=None, y=None):
    if x is None:
        x = self.x
    if y is None:
        y = self.y