将类实例变量分配给 Python 方法中的局部变量

har*_*les 1 python oop python-3.x

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

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
Run Code Online (Sandbox Code Playgroud)

通过这样做,人们可以参考bar而不是self.bar在 的范围内Foo.baz()

这样做是错误的还是Unpythonic?

pok*_*oke 5

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

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

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

所有这些影响通常都非常小,根本不重要。然而,它们就在那里,也许它们可能与您相关。在此之前,请使用您最喜欢的东西。