代码之家  ›  专栏  ›  技术社区  ›  ryanjdillon

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

  •  3
  • ryanjdillon  · 技术社区  · 13 年前

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

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

    但是。。。这似乎不起作用:

    NameError: name 'self' is not defined
    

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

    2 回复  |  直到 13 年前
        1
  •  5
  •   Martijn Pieters    13 年前

    您需要使用sentinel值,然后用所需的实例属性替换这些值。 None 是一个不错的选择:

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

    请注意,函数签名仅执行 一旦 ; 您不能将表达式用于默认值,并且期望这些值随着对函数的每次调用而改变。

    如果你 能够设置 x y 没有一个 那么您需要使用一个不同的、唯一的singleton值作为默认值。使用的实例 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)

        2
  •  2
  •   YXD    13 年前
    def transform_point(self, x=None, y=None):
        if x is None:
            x = self.x
        if y is None:
            y = self.y
    

    推荐文章