Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中,将类实例变量分配给方法中的局部变量_Python_Python 3.x_Oop - Fatal编程技术网

在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不要忘记,如果您更新局部变量,您需要将其重新分配给属性,如果您希望它在方法结束后保持不变。