我有一个案例,我正在尝试制作类似于以下打印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
,但我想知道是否有更简洁的方法来实现这一点。
注意:我也知道如果我复制粘贴函数它会起作用,但我认为这是不好的做法,因为我必须为我做的每一个更改维护该函数的所有副本
答案 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