在Python中要自定义一些数据结构,使之能够跟list、dict、tuple表现一样,需要去实现某些协议。这里的协议跟其他语言中所谓的"接口"概念很像,一样的需要你去实现才行,只不过没那么正式而已。
如果要自定义不可变容器类型,只需要定义__len__ 和 __getitem__方法;
如果要自定义可变容器类型,还需要在不可变容器类型的基础上增加定义__setitem__ 和 __delitem__。
如果自定义数据结构还支持"可迭代", 那就还需要定义__iter__。
需要返回数值类型,以表示容器的长度。该方法在可变容器和不可变容器中必须实现。
__getitem__(self, key)class Queryset(object):
def __init__(self):
self.data = []
def __len__(self):
return len(self.data)
def __getitem__(self, item):
return self.data[item.start:item.stop:item.step]
def __setitem__(self, key, value):
if isinstance(key, int):
raise RuntimeError("数据类型错误")
self.data[key] = value
def __contains__(self, item):
if item in self.data:
return True
else:
return False
def __reversed__(self):
self.data.sort(reverse=True)
return self.data
def __iter__(self):
return self.data.__iter__()
def append(self, item):
self.data.append(item)
def remove(self, item):
self.data.remove(item)
def __str__(self):
return self.data
if __name__ == '__main__':
q = Queryset()
q.append(1)
q.append(2)
q.append(3)
q.append(4)
print(1 in q)
print(q[:2])
for i in q:
print(i)
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |