【发布时间】:2011-01-11 12:26:34
【问题描述】:
假设您在 Python 中有一个公共方法,其主要目的是检索底层数据属性(即内部后备存储)的值。该方法可能具有惰性求值逻辑等。属性就是这种方法的一个示例。
那么方法和数据属性使用相同的名称是很自然的,除了数据属性的下划线前缀。比如——
class C(object):
def __init__(self):
self._x = None
@property
def x(self):
"""I'm the 'x' property."""
return self._x
(来自Python's "property" documentation)
但是,如果该方法是供内部使用的并且它本身带有下划线前缀,那么有哪些首选约定呢?使用两个前导下划线作为后备存储前缀会调用名称修改,因此并不理想。
可能有两种可能——
def _get_x(self):
return self._x
def _x(self):
return self._x_
不过,Python 风格表示第二个(附加下划线)只能用于避免与保留关键字发生冲突。
【问题讨论】:
-
我很高兴 cmets 不能有 -1 的分数。
-
我认为拥有私有财产会让很多人感到困惑。我建议从
property派生你自己的类,也许是cached_property,并定义__get__让它调用getter,如果它还没有调用getter,如果它有,返回它时返回的值被称为。并定义__delete__忘记缓存的值。 -
我只是为自己写了一个,看看能不能完成。确实可以,但是有点难看,并且需要使用弱引用,这意味着属性所在的类必须是弱引用的。
标签: python properties