首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

python学习札记 - @property

2012-12-19 
python学习笔记 - @property@property 可以将python定义的函数“当做”属性访问,从而提供更加友好访问方式,

python学习笔记 - @property
@property 可以将python定义的函数“当做”属性访问,从而提供更加友好访问方式,但是有时候setter/getter也是需要的,我们视具体情况吧

请注意以下代码场景:

代码片段1:



代码片段2:


代码1、2的区别在于
class Parrot(object):

在python2.6下,分别运行测试
片段1:将会提示一个预期的错误信息 AttributeError: can't set attribute
片段2:正确运行

参考python2.6文档,@property将提供一个ready-only property,以上代码没有提供对应的@voltage.setter,按理说片段2代码将提示运行错误,在python2.6文档中,我们可以找到以下信息:

BIF:
property([fget[, fset[, fdel[, doc]]]])
Return a property attribute for new-style classes (classes that derive from object).
原来在python2.6下,内置类型 object 并不是默认的基类,如果在定义类时,没有明确说明的话(代码片段2),我们定义的Parrot(代码片段2)将不会继承object

而object类正好提供了我们需要的@property功能,在文档中我们可以查到如下信息:

new-style class
Any class which inherits from object. This includes all built-in types like list and dict. Only new-style classes can use Python's newer, versatile features like __slots__, descriptors, properties, and __getattribute__().

同时我们也可以通过以下方法来验证


最后的代码将如下:


另外,@property是在2.6、3.0新增的,2.5没有该功能。

以上为自己@property经历,我也在学习python中,目前使用的是python 2.6.6 final,很多东西不懂,在此笔记下,也希望对其他同学有帮助

Good luck!



希望对你有帮助 今天才看到关于析构函数的定义介绍,你的理解是对的,__del__是用于垃圾回收机制,但是发生调用的具体时间是不可知的,如果可以的话,我们应该尽力避免使用。 11 楼 freecode 2012-02-10   学习了,增加使用经验

热点排行