在python中使用类变量作为非默认参数

时间:2011-01-09 06:39:22

标签: python class variables default-value

有没有办法在类中保留私有类变量,仍然使用它作为非默认变量的默认值(不在类之外定义该值)?

示例:

class a:
    def __init__(self):
        self.__variable = 6
    def b(self, value = self.__variable):
        print value

3 个答案:

答案 0 :(得分:14)

你是在思考这个问题:

class a:

    def __init__(self):
        self.__variable = 6

    def b(self, value=None):
        if value is None:
            value = self.__variable
        print value

答案 1 :(得分:4)

  1. self.__variable是一个实例变量,而不是类变量。
  2. 因为默认参数是在 function 方法定义时计算的,所以不能使用实例变量作为默认参数 - 至少不能直接使用(通常的技巧,默认为None和将if arg is None: arg = real_default添加到函数体中,确实有效。)
  3. 领先的双重下划线并不意味着“私人”,他们的意思是“名称捣乱并惹麻烦”。如果你不确切地知道我的意思,你根本不应该使用这个“功能”。预期用途是私人成员 - 使用一个下划线。

答案 2 :(得分:4)

值得添加的是,如果希望None在允许的参数范围内,则可以创建一个自定义的sentinal值,该值不会用于代码中的任何其他用途。如果不这样做,valueNone将永远无法从b返回。

UseDefault = object()

# Python 3? Otherwise, you should inherit from object unless you explicitly
# know otherwise.
class a:    
    def __init__(self):
        self._variable = 6

    def b(self, value=UseDefault):
        if value is UseDefault:
            value = self._variable
        print value

现在None可以传递给b而不会导致默认使用。