在Python中,如何避免__init__参数与实例变量同名?
在init函数中,初始化实例变量的最佳方法是什么?使用相同的名字两次算不算不好的风格?
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风格指南没有特别提到这个问题。它只是说实例变量和方法的名字应该使用小写字母,并用下划线分隔单词。
2 个回答
4
更改底层实例变量的名称有几个原因,但这主要取决于你实际想做什么。一个很好的例子是使用属性。比如,你可以创建一些不会被覆盖的变量,这可能意味着你想把它们存储在其他变量下,像这样:
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
这段代码会创建一个类,你可以用两个值来实例化它,分别是x和y,但x是不能被改变的,而y是可以的。
不过一般来说,重复使用同一个实例变量的名称是清晰且合适的。
13
这可能是个人观点,但我认为用同样的名字两次并不是一种糟糕的风格。在Python中,self
并不是隐含的,所以self.real
和real
是完全不同的,没什么危险,比如名字被隐藏的问题,这在其他语言中(比如C++或Java)是比较常见的,那里不太提倡把参数命名成和成员一样。
其实,把参数命名成和成员一样,实际上给了一个很强的暗示,说明这个参数会一一对应到那个成员上。