【问题标题】:Assign a class instance variable to a local variable within a method in Python将类实例变量分配给 Python 方法中的局部变量
【发布时间】:2017-10-27 07:07:34
【问题描述】:

可以将类实例变量赋值给方法内的局部变量,如:

class Foo(object):
    def __init__(self):
        self.bar = 'bar'

    def baz(self):
        # assign instance variable to local variable with a method
        bar = self.bar

        # do work with local variable
        bar = "qux"

        # update value of instance variable
        self.bar = bar
        return self

通过这样做,可以在Foo.baz() 的范围内引用bar 而不是self.bar

这样做是错误的还是 Unpythonic?

【问题讨论】:

    标签: python python-3.x oop


    【解决方案1】:

    这样做完全没问题。您可能会争辩说您不需要 这样做(至少在您的示例中,如果您不使用局部变量,您可以将方法减少到两行),但没有这样做真的有任何问题。

    有某些效果可能最终使一种或另一种方式更可取:

    • 创建一个局部变量显然会创建另一个局部变量
    • 为此使用临时局部变量需要更多代码,从而增加了方法的整体复杂性
    • 访问局部变量比访问实例属性更快
    • 只有一个更新实例属性的点使方法更接近原子性(虽然它不会是纯原子的)并避免属性上的中间值
    • 同样,如果访问或修改 self.bar 有副作用,那么最好只执行一次而不是多次触发它们

    所有这些影响通常都非常小而且根本不重要。然而它们就在那里,只是也许它们可能与你相关。在那之前,只使用你最舒服的。

    【讨论】:

    • 关于副作用,访问一次不一定更好,只是不同而已。重新评估其值是否可以在循环过程中发生变化可能很重要。否则,这是一个很好的答案。没有一个正确或错误的答案,只有很多因素有助于做出明智的决定。
    • @chepner 你说得对,调整了那部分的措辞。
    • 感谢您提供有用的 cmets @poke
    • 不要忘记,如果您更新局部变量,如果您希望它在方法结束后保持不变,则需要将其分配回属性。
    猜你喜欢
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 2019-03-20
    • 2015-11-05
    • 1970-01-01
    相关资源
    最近更新 更多