我遇到了一段Python代码,技术上看起来像这样:
def bar(b):
return b*2
class MyClass(object):
def __init__(self, a):
self.a = a
self.b = 10
def foo(self, b=None):
return bar(b if b is not None else self.b)
因此,类具有b
作为固定属性,如果在没有参数的情况下调用它,则将其用作类方法foo
的默认输入。
请假设在这种情况下b
预计是浮动的。
请忽略未使用的self.a
,否则使用它 - 我只是想确保您看到构造函数可以设置属性。
用法如下:
c = MyClass(2)
c.foo(3) # returns 3*2 = 6
c.foo() # returns 10*2 = 20
在这种情况下,我想知道foo
- 方法。这是将self.b
作为b
的默认值实现的好方法吗?
以下两个建议中的一个或多或少是我的愿望吗?如果是这样的话:为什么?
def foo(self, b=None):
return bar(b or self.b)
或
def foo(self, b=self.b):
return bar(b)
答案 0 :(得分:7)
坚持第一个选择:
def foo(self, b=None):
return bar(b if b is not None else self.b)
如果您使用第二个选项:
def foo(self, b=None):
return bar(b or self.b)
然后你将改变x.foo(0)
的行为,因为零也是假的。
第三种选择不是一种选择:
def foo(self, b=self.b):
return bar(b)
定义方法self
时, foo()
不存在,因此您不能将self.b
用作默认参数。定义将失败;或者更糟糕的是,它会在执行定义时尝试使用self
的当前值。