将“如果x不等于y的x”重构为“ x或y”

纳拉斯

我遇到了一段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)
凯尔伍德

坚持第一个选择:

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)

selffoo()定义方法时不存在,因此您不能将其self.b用作默认参数。该定义将失败。或更糟糕的是,它将尝试使用self执行定义时的当前值

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章