在Python中,内部属性的备份存储有什么命名约定?
假设你在Python中有一个公开的方法,它的主要作用是获取一个内部数据属性的值(也就是存储数据的地方)。这个方法可能会有延迟计算的逻辑等等。属性就是这样一个方法的例子。
在这种情况下,给这个方法和数据属性使用相同的名字是很自然的,只不过数据属性前面加一个下划线。例如--
class C(object):
def __init__(self):
self._x = None
@property
def x(self):
"""I'm the 'x' property."""
return self._x
(来自 Python的“property”文档)
但是如果这个方法是内部使用的,并且本身也以下划线开头,那么有什么推荐的命名规则呢?如果把存储数据的属性前面加两个下划线,就会触发名字重整,这样就不太理想了。
有两个可能的选择--
def _get_x(self):
return self._x
def _x(self):
return self._x_
根据Python的风格,第二种选择(在名字后面加一个下划线)应该只在避免与保留关键字冲突时使用。
2 个回答
0
为什么要把它设成属性,如果只是内部使用的话?如果只是内部用,直接访问这个属性就行了。
不过这样的话,你还是会用一个下划线,但叫个不同的名字。不过,这样一来,把它设成属性的意义就没了。
6
推荐的写法是用一个下划线开头。
这是PEP 8对私有属性的建议。
可以看看这个关于property()的例子:
>>> help(property)
Help on class property in module builtins:
class property(object)
| property(fget=None, fset=None, fdel=None, doc=None) -> property attribute
|
| fget is a function to be used for getting an attribute value, and likewise
| fset is a function for setting, and fdel a function for del'ing, an
| attribute. Typical use is to define a managed attribute x:
| class C(object):
| def getx(self): return self._x
| def setx(self, value): self._x = value
| def delx(self): del self._x
| x = property(getx, setx, delx, "I'm the 'x' property.")
|
| Decorators make defining new properties or modifying existing ones easy:
| class C(object):
| @property
| def x(self): return self._x
| @x.setter
| def x(self, value): self._x = value
| @x.deleter
| def x(self): del self._x
|