引用方法中的属性

时间:2016-12-06 20:51:38

标签: python python-2.7 python-3.x class attributes

在类中的方法中引用具有新变量名的属性是不好的做法吗?例如:

class Stuff:
    def __init__(self, a):
        self.a = a

    def some_method(self):
        a = self.a
        # Do some stuff with a

我在其他人看到过这种情况'代码和我自己习惯了,尤其是长变量名。我这样做时似乎创建了a的副本,如果a非常大,则可能会出现问题。我应该坚持在self.a内拨打some_method吗? python垃圾会在调用后收集a中创建的some_method吗?

1 个答案:

答案 0 :(得分:5)

这不一定是一个不好的做法,你可以出于两个原因(参见@ShadowRanger的评论,因为一个相当模糊的第三个原因)支持它:

  • 使代码更具可读性(正如您所提到的,长名称​​太长
  • 消除点;如果你有一个使用self.a的繁琐循环,如果你不需要每次都进行查找(不过太多时间),它可能会浪费一些时间。另外,如果这不是普通属性而是一个函数,则将其分配给局部变量将消除从functionmethod的转换,这也会减少一些执行时间。

另外,复制不是最好的术语,你只需要使用不同的名称来引用同一个对象。方法some_method完成后,a将不存在,因为它仅在本地范围内创建。

不,垃圾收集不会发生,因为a(分配给self.a的值)不是唯一的引用;你仍然有self.a来保持分配给它的值。