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

Eva*_* Pu 1 python refactoring

不知道如何表达它,但这是交易。我有一个脚本,其中每个变量都是全局定义的,但后来我想将脚本转换为类以进行更好的封装。

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

x = 5
Run Code Online (Sandbox Code Playgroud)

进入

self.x = 5
Run Code Online (Sandbox Code Playgroud)

做完之后,脚本中的所有函数都需要变成类的方法,然而,大多数方法都是数学公式,重构一些像这样干净的东西

z = x ** y + x
Run Code Online (Sandbox Code Playgroud)

进入

z = self.x ** self.y + self.x
Run Code Online (Sandbox Code Playgroud)

真的很伤可读性。

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

def method(self, ...):
  x = self.x
  y = self.y
  ...
Run Code Online (Sandbox Code Playgroud)

它使公式可读,但输入所有重命名真的很痛苦,有没有更优雅的方法来做到这一点?

Pet*_*ter 6

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

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

def calculate_z(®):
    return ®.x ** ®.y + ®.x
Run Code Online (Sandbox Code Playgroud)