在Python中,将类实例变量分配给方法中的局部变量
可以将类实例变量分配给方法中的局部变量,例如:在Python中,将类实例变量分配给方法中的局部变量,python,python-3.x,oop,Python,Python 3.x,Oop,可以将类实例变量分配给方法中的局部变量,例如: 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 b
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
这样做是错误的,还是不合音律的?这样做很好。你可以说你不需要这样做,至少在你的例子中,如果你不使用局部变量,你可以把方法减少到两行,但是这样做并没有什么问题 有一些效果可能最终使一种或另一种方式更可取: 创建一个局部变量显然会创建另一个局部变量 为此使用临时局部变量需要更多的代码,从而增加了方法的总体复杂性 访问局部变量比访问实例属性更快 只有一个更新实例属性的点会使方法更接近原子性,但它不会是纯原子的,并且会避免属性上的中间值 类似地,如果访问或修改self.bar有副作用,那么只执行一次可能比多次触发它们更可取
所有这些影响通常都非常小,根本不重要。然而他们在那里,只是可能他们会与你相关。在那之前,只使用你最舒服的东西。这样做很好。你可以说你不需要这样做,至少在你的例子中,如果你不使用局部变量,你可以把方法减少到两行,但是这样做并没有什么问题 有一些效果可能最终使一种或另一种方式更可取: 创建一个局部变量显然会创建另一个局部变量 为此使用临时局部变量需要更多的代码,从而增加了方法的总体复杂性 访问局部变量比访问实例属性更快 只有一个更新实例属性的点会使方法更接近原子性,但它不会是纯原子的,并且会避免属性上的中间值 类似地,如果访问或修改self.bar有副作用,那么只执行一次可能比多次触发它们更可取
所有这些影响通常都非常小,根本不重要。然而他们在那里,只是可能他们会与你相关。在那之前,只使用你最满意的方法。关于副作用,一次使用并不一定更好,只是不同而已。如果其值在循环过程中会发生变化,则重新评估可能很重要。否则,这是一个很好的答案。答案没有对错之分,只有很多因素有助于做出明智的决定。@chepner你是对的,调整了该部分的措辞。感谢您的有用评论@pokeDon不要忘记,如果您更新局部变量,您需要将其重新分配给属性,如果您希望它在方法结束后保持不变。关于副作用,访问一次并不一定更好,只是不同而已。如果其值在循环过程中会发生变化,则重新评估可能很重要。否则,这是一个很好的答案。答案没有对错之分,只有很多因素有助于做出明智的决定。@chepner你是对的,调整了该部分的措辞。感谢您的有用评论@pokeDon不要忘记,如果您更新局部变量,您需要将其重新分配给属性,如果您希望它在方法结束后保持不变。