python实现数组属性

属性的简单用法

属性看起来像是对成员进行直接访问,,但又可以像函数一样对成员访问进行其他处理,所以属性是一种兼具易用性和数据封装的语言设施。python定义属性的方式有很多种,下面是我认为最简单直接的一种:

::self._x = :return self._x:self._x = max(0, x)x = property(get_x, set_x)

使用代码:

mc = MyClass()print mc.xmc.x = 39print mc.x

输出是:

1039实现数组属性

Delphi除了普通属性外,还有一种数组属性:

TMyClass = class(TObject): Integer): Pointer; : Integer; Item: Pointer);public property Items[Index: Integer]: Pointer read Get write Put;end;

Items就像数组一样,可以用下标访问:

v1 = myclass.Items[2]myclass.Items[1] = v2

利用python的语法特性,也可以实现类似的效果,这里用到Descriptor,关于这种语法特性,建议看这个文档:Descriptor HowTo Guide,下面就直接给出一个简略的代码:

::self.fget = fgetself.fset = fsetself.obj = :self.obj = instancereturn self:if self.fget is None:raise AttributeError(“unreadable attribute”)return self.fget(self.obj, item):if self.fset is None:raise AttributeError(“can’t set attribute”)self.fset(self.obj, key, value)

然后就可以像这样定义数组属性:

::self._a = [1, 2, 3]:return self._a[index]:self._a[index] = valuea = property_a(get_a, set_a)

用法如下:

mc = MyClass()print mc.a[1]mc.a[1] = 39print mc.a[1]

输出如下:

239

本人学习python不长,其中必有一些考虑不全的地方,欢迎高手指正

往往教导我们大家要好好学习天天向上,要永不言弃坚持到底百折不挠宁死不屈,

python实现数组属性

相关文章:

你感兴趣的文章:

标签云: