在没有self的情况下在python中重命名类变量

时间:2016-03-19 09:59:15

标签: python refactoring

不知道怎么说它,但这是交易。我有一个脚本,其中每个变量都是全局定义的,但后来我想将脚本转换为类以便更好地封装。

但是,我在脚本中使用的所有变量都需要转换为对象变量。我会改变像

这样的东西
x = 5

self.x = 5

在这之后,脚本中的所有函数都需要转换为类的方法,但是,大多数方法都是数学公式,并且重构一些干净的东西

z = x ** y + x

z = self.x ** self.y + self.x

真的伤害了可读性。

因此,作为解决方案,我一直在方法的开头输入这些非常笨拙的重命名:

def method(self, ...):
  x = self.x
  y = self.y
  ...

它使公式可读,但输入所有重命名真的很痛苦,有更优雅的方法吗?

2 个答案:

答案 0 :(得分:3)

self只是建议的名称。我鼓励你使用它,但在某些情况下最好缩短它。

class A:
    x = None
    y = None

    def calculate_z(s):
        return s.x ** s.y + s.x

foo = A()
foo.x = 4
foo.y = 2
foo.calculate_z()  # 20

有趣的事实:你甚至可以使用unicode字符,比如®(在Python 3中)。

def calculate_z(®):
    return ®.x ** ®.y + ®.x

答案 1 :(得分:0)

嗯,可能还有其他一些解决方案,但它们最多都是丑陋的黑客。 通过使用多个赋值,您可以使代码不那么尴尬:

x, y = self.x, self.y

此外,xy在CPython中使用的速度比self.xself.y更快,因为后者需要为每次使用都进行代价高昂的属性查找。 / p>