Bos*_*ash 2 python properties decorator python-decorators
两者之间有区别吗?
class Example(object):
def __init__(self, prop):
self._prop = prop
def get_prop(self):
return self._prop
def set_prop(self, prop):
self._prop = prop
prop = property(get_prop, set_prop)
Run Code Online (Sandbox Code Playgroud)
和
class Example2(object):
def __init__(self, prop):
self._prop = prop
@property
def prop(self):
return self._prop
@prop.setter
def prop(self, prop):
self._prop = prop
Run Code Online (Sandbox Code Playgroud)
他们似乎做了同样的事情,这不符合python的目标,即只有一种明显的做事方式.有没有首选方式?如果是这样,为什么?
该@decorator语法只是语法糖.除了语法之外,两种方法之间没有区别,最终结果是相同的.
@property
def prop(self):
return self._prop
Run Code Online (Sandbox Code Playgroud)
被翻译成:
def prop(self):
return self._prop
prop = property(prop)
Run Code Online (Sandbox Code Playgroud)
这同样适用于二传手:
@prop.setter
def prop(self, prop):
self._prop = prop
Run Code Online (Sandbox Code Playgroud)
变为:
tmp = prop.setter
def prop(self, prop):
self._prop = prop
prop = tmp(prop)
Run Code Online (Sandbox Code Playgroud)
因为prop.setter首先评估装饰器表达式().请参阅@property装饰器如何工作?如何.setter()(.deleter()和.getter())工作.
需要注意的是prop.setter()装饰(和.getter()和.deleter()属性的对象的装饰)在Python 2.6只添加.另外,property在2.2版本中添加了Python,但装饰器只添加到Python 2.4中的语言中.
因此,许多文档仍然使用旧的property构造函数方法.
但是,如果您要编写Python 2.6或更高版本,则应该使用装饰器语法.
在@property与@prop.setter装饰给出一个明确的早,你有产权的功能在这里的视觉信号,而单独的prop = property(...)属性功能后线容易漏诊,特别是如果属性实现更长.
| 归档时间: |
|
| 查看次数: |
696 次 |
| 最近记录: |