在Python中命名私有属性

时间:2017-06-09 22:29:39

标签: python

我的问题几乎与this one相同,但它看起来像一个死线程,我想问的问题看起来有点埋葬。

问题:如果我想使用@property制作私有属性,我应该为底层变量命名什么?

代码:

# I want to replace "NAME" with something.
class MyClass(object):
  def __init__(self, x):
    self.NAME = x

  @property
  def _x(self):
    validate_x_get()
    return self.NAME

  @_x.setter
  def _x(self, val):
    validate_x_set(val)
    self.NAME = val

  ...

说明:我想使用@property@valname.setter来允许MyClass方法很好地与self.NAME一起使用。链接问题的答案通常说只是制作私人的getter和setter,但感觉就像有should be a better way

讨论:

  • NAME的自然名称为_x,但这会使self._x无限递归。
  • x将公开,这不是我想要的。
  • __x似乎是对mangling的误用,这是为了防止子类化问题。
  • _x_private_stored_x_my_x都令人不快。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

总结一下讨论:

  • 这主要是基于意见的,因为Python"私人"按照惯例;
  • 任何可读易于理解一致的解决方案都足够好。

本着这种精神,我会在我的代码库中提倡_x_(最少的其他字符)。感谢所有评论者。