繁体   English   中英

在 Python 中,避免对 __init__ 参数和实例变量使用相同名称的最佳方法是什么?

[英]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.realreal是完全不同的,并且没有名称隐藏等危险,就像您在其他语言中所经历的那样(即 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM