python实现数组属性
来源:互联网 发布:mac 室内设计软件 编辑:程序博客网 时间:2024/06/07 11:13
属性的简单用法
属性看起来像是对成员进行直接访问,但又可以像函数一样对成员访问进行其他处理,所以属性是一种兼具易用性和数据封装的语言设施。python定义属性的方式有很多种,下面是我认为最简单直接的一种:
class MyClass(object): def __init__(self): self._x = 10 def get_x(self): return self._x def set_x(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)private function Get(Index: Integer): Pointer; procedure Put(Index: 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,下面就直接给出一个简略的代码:
class property_a(object): def __init__(self, fget=None, fset=None): self.fget = fget self.fset = fset self.obj = None def __get__(self, instance, owner): self.obj = instance return self def __getitem__(self, item): if self.fget is None: raise AttributeError("unreadable attribute") return self.fget(self.obj, item) def __setitem__(self, key, value): if self.fset is None: raise AttributeError("can't set attribute") self.fset(self.obj, key, value)
然后就可以像这样定义数组属性:
class MyClass(object): def __init__(self): self._a = [1, 2, 3] def get_a(self, index): return self._a[index] def set_a(self, index, value): self._a[index] = value a = property_a(get_a, set_a)
用法如下:
mc = MyClass()print mc.a[1]mc.a[1] = 39print mc.a[1]
输出如下:
239
本人学习python不长,其中必有一些考虑不全的地方,欢迎高手指正
0 0
- python实现数组属性
- python实现二维数组
- 用python实现数组
- python字典数组排序实现
- Python 实现简单的数组
- Python实现数组逆向输出
- 最大子数组--python实现
- Python中实现多属性排序
- Python中实现多属性排序
- python使用函数属性实现全局变量功能
- python实现list数组转置
- Python: 数组条件过滤简洁实现方式
- Python 实现简单的二维数组
- Python实现求解最大子数组问题
- 随机打乱数组的顺序-python实现
- 数组全排列算法的python实现
- 牛客网 二维数组中的查找python实现
- python求解next数组实现KMP算法
- 寻找单链表中倒数第k个结点
- Notes03:侧边导航菜单
- matlab bar图x轴坐标旋转函数
- v$asm_diskgroup和v$asm_disk中对于 disk 大小的不同含义
- php 列队处理 array_push array_unshift array_pop array_shift
- python实现数组属性
- 辛星浅析Linux中的inode
- HDU 4280 Island Transport(网络流,SAP)
- 查找算法总结(1)
- FOR WHILE 之我见
- web开发N例-案例3:使用post和get方法在php和html间传递参数
- 聊聊进程和线程的区别
- 6 layer-list 滚动条样式设置
- HDU 5175 Misaki's Kiss again(数学,暴力枚举)