python实现数组属性

原创 2015年02月17日 11:54:04

属性的简单用法

属性看起来像是对成员进行直接访问,但又可以像函数一样对成员访问进行其他处理,所以属性是一种兼具易用性和数据封装的语言设施。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.x
mc.x = 39
print mc.x

输出是:

10
39

实现数组属性

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] = 39
print mc.a[1]

输出如下:

2
39

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

python中的数组类型及特点

名称 表示方法示例 是否有序 函数方法(增删等) 特点 List 类型表示:L L = ['Adam', 95.5, 'Lisa'...
  • Tony_Stark_Wang
  • Tony_Stark_Wang
  • 2017年09月12日 09:32
  • 167

python数组基础

1.定义数组#dingyishuzu money = [] print len(money) #changduwei02.往数组中插入元素money = [] money.append("张总") ...
  • github_26672553
  • github_26672553
  • 2016年09月05日 19:26
  • 4854

Python之数组(array)使用方法总结与Numpy中的数组用法

Python&&Numpy
  • chaoshengmingyue
  • chaoshengmingyue
  • 2016年03月17日 13:32
  • 26451

对象数组通过对象的属性进行排序

最常见的对数组进行排序,可以用sort()方法,按照数组中元素的首字母或者数字大小进行排序var arr = [2,5,13,7,4,9,1]; var arr1 = arr.sort(); cons...
  • xiaobing_hope
  • xiaobing_hope
  • 2017年03月31日 00:11
  • 6727

“var arr = []; ”和 “var arr = {};” 的区别

1、面试题    var arr = [];    var arr = {};    比较上述代码有什么区别? 2、解析    var arr = [];是一个数组对象    va...
  • you23hai45
  • you23hai45
  • 2014年08月06日 19:05
  • 2694

python里面的“数组”——列表(清单整理)【0】

首先我先跟大家说说,为什么都说python里面的列表是打了激素的数组?额哼,原来是因为python里面的数组不仅拥有C,Java的数组的功能,而且python里面的列表就像一个大盒子一样,你可以把整数...
  • scuter_yu
  • scuter_yu
  • 2015年03月23日 23:17
  • 409

Python 使用循环数组实现队列 (基于class, 包含迭代器)

Python 使用循环数组实现队列 (基于class, 包含迭代器)
  • guaguastd
  • guaguastd
  • 2015年02月02日 17:51
  • 1813

用python实现数组

用python实现数组 今天想练习一下python,就决定用python实现一下数组的功能。因为python中没有数组。 题目:用二维数组实现蛇形填数,用户输入一个数字N,程序应该输出一个N×N的...
  • Coding_Or_Dead
  • Coding_Or_Dead
  • 2017年04月30日 23:59
  • 653

python中的list和array的不同之处

python中的list和array的不同之处        python中的list是python的内置数据类型,list中的数据类不必相同的,而array的中的类型必须全部相同。在list中的...
  • liyaohhh
  • liyaohhh
  • 2016年04月04日 09:51
  • 54244

Python 输出JSON对象数组&写入数据到MySQL

准备数据,放到列表中import re input = open('C:\\Users\\Administrator\\Desktop\\e.txt','r') text=input.read() l...
  • Nougats
  • Nougats
  • 2017年09月03日 16:59
  • 1384
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python实现数组属性
举报原因:
原因补充:

(最多只允许输入30个字)