[英]In Python, what's the best way to avoid using the same name for a __init__ argument and an instance variable?
在init function 中初始化实例变量的最佳方法是什么? 两次使用同一个名字是不是很糟糕?
class Complex:
def __init__(self, real, imag):
self.real = real
self.imag = imag
想出这样的任意替代名称对我来说看起来很草率:
class Complex:
def __init__(self, realpart, imagpart):
self.r = realpart
self.i = imagpart
我认为 PEP 8 风格指南中没有解决这个问题。 它只是说实例变量和方法名称应该是小写的,用下划线分隔单词。
这可能是主观的,但我不会认为两次使用相同的名字是不好的风格。 由于self
在 Python 中并不隐含,因此self.real
和real
是完全不同的,并且没有名称隐藏等危险,就像您在其他语言中所经历的那样(即 C++/Java,其中成员等命名参数有些不受欢迎) .
实际上,为参数赋予与成员相同的名称会给出强烈的语义提示,即参数将 map 一个一个地传递给成员。
更改底层实例变量的名称有几个原因,但这在很大程度上取决于您实际需要做什么。 一个很好的例子是使用属性。 例如,您可以创建不会被覆盖的变量,这可能意味着您希望将它们存储在其他变量下,如下所示:
class MyClass:
def __init__(self, x, y):
self._x, self._y = x, y
@property
def x(self):
return self._x
@x.setter
def x(self, value):
print "X is read only."
@property
def y(self):
return self._y
@y.setter
def y(self, value):
self._y = value
这将创建一个 class 允许您使用两个值 x 和 y 进行实例化,但其中 x 不能更改而 y 可以。
不过一般来说,为实例变量重用相同的名称是明确且适当的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.