重命名 python 中的 class 变量,不带 self
rename class variables in python without the self
不确定如何表达它,但事情就是这样。我有一个脚本,其中每个变量都是全局定义的,但后来我想将脚本转换为 class 以便更好地封装。
但是,我在脚本中使用的所有变量都需要转换为对象变量。我会改变像
x = 5
进入
self.x = 5
然后脚本中的所有函数都需要变成class的方法,然而,大部分方法都是数学公式,重构得像
一样干净
z = x ** y + x
进入
z = self.x ** self.y + self.x
确实损害了可读性。
因此,为了解决这个问题,我一直在方法的开头输入这些非常笨拙的重命名:
def method(self, ...):
x = self.x
y = self.y
...
它使公式可读,但输入所有重命名真的很痛苦,有没有更优雅的方法?
好吧,可能还有一些其他解决方案,但它们最多都是丑陋的 hack。
不过,您可以通过使用多重赋值来减少代码的尴尬:
x, y = self.x, self.y
此外,x
和 y
在 CPython 中的使用速度比 self.x
和 self.y
快,因为后者每次使用都需要昂贵的属性查找.
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
不确定如何表达它,但事情就是这样。我有一个脚本,其中每个变量都是全局定义的,但后来我想将脚本转换为 class 以便更好地封装。
但是,我在脚本中使用的所有变量都需要转换为对象变量。我会改变像
x = 5
进入
self.x = 5
然后脚本中的所有函数都需要变成class的方法,然而,大部分方法都是数学公式,重构得像
一样干净z = x ** y + x
进入
z = self.x ** self.y + self.x
确实损害了可读性。
因此,为了解决这个问题,我一直在方法的开头输入这些非常笨拙的重命名:
def method(self, ...):
x = self.x
y = self.y
...
它使公式可读,但输入所有重命名真的很痛苦,有没有更优雅的方法?
好吧,可能还有一些其他解决方案,但它们最多都是丑陋的 hack。 不过,您可以通过使用多重赋值来减少代码的尴尬:
x, y = self.x, self.y
此外,x
和 y
在 CPython 中的使用速度比 self.x
和 self.y
快,因为后者每次使用都需要昂贵的属性查找.
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