【问题标题】:dynamic default value in pythonpython中的动态默认值
【发布时间】:2018-11-17 12:52:19
【问题描述】:

我有一个案例,我正在尝试编写类似于下面 print 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,但是我想知道是否有更简洁的方法来实现这一点。

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

【问题讨论】:

    标签: python-3.x default-value


    【解决方案1】:

    标准的做法确实是将默认设置为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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-25
      • 1970-01-01
      • 2019-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多