python中的动态默认值

时间:2018-06-07 14:40:50

标签: python-3.x default-value

我有一个案例,我正在尝试制作类似于以下打印2而不是1的代码。

class foo():
    _default_val = 1
    @classmethod
    def print_num(cls, num=_default_val):
        print(num)

class foo2(foo):
    _default_val = 2

tester = foo2()
tester.print_num()
# 1

当然,我可以设置num=None并访问self._default_val,如果它仍然是None,但我想知道是否有更简洁的方法来实现这一点。

注意:我也知道如果我复制粘贴函数它会起作用,但我认为这是不好的做法,因为我必须为我做的每一个更改维护该函数的所有副本

1 个答案:

答案 0 :(得分:0)

标准方法确实是将默认值设置为None并检查它是否为is not None

这是常用的,其他Python开发人员会立即明白你的意图,所以你不应该尝试重新发明轮子。

class Foo():
    _default_val = 1

    @classmethod
    def print_num(cls, num=None):
        num = num if num is not None else cls._default_val
        print(num)

class Foo2(Foo):
    _default_val = 2

tester = Foo2()
tester.print_num(0) # prints: 0
tester.print_num() # prints: 2