python魔术方法abstract_Python基础之魔术方法(一个序列容器的魔术方法)

# 创建自己想要的序列容器魔术方法

'''

__len__():调用len(obj)函数会调用这个魔术方法

__getitem__(self,key):在使用下标操作temp['key']以及切片操作的时候会执行这个魔术方法。

__setitem__(self,key,value):在给这个容器设置key和value的时候会调用这个魔术方法。

__delitem__(self,key):在删除容器中的某个key对应的这个值的时候会调用这个魔术方法。

__iter__(self):在遍历这个容器的时候,会调用容器的这个方法,然后返回一个迭代器,再调用这个迭代器的__next__方法。

__reversed__(self):在调用reversed(obj)函数的时候会调用这个方法。反转

'''

class LVlist(object):

def __init__(self,values=None):

if values:

self.values = values

else:

self.values = []

def __len__(self):

return len(self.values)

def __getitem__(self, item):

# 方式一

if isinstance(item,slice):

return self.values[item.start:item.stop:item.step]

else:

return self.values[item]

# 方式二

# return self.values[item]

def __setitem__(self, key, value):

self.values[key] = value

def __delitem__(self, key):

del self.values[key]

def __iter__(self):

return iter(self.values)

def __reversed__(self):

return reversed(self.values)

lv = LVlist(values = [1,2,3])

print("__len__()对象返回值:{}".format(len(lv)))

print("__getitem__()对象返回值(index):{}".format(lv[0]))

print("__getitem__()对象返回值(切片返回):{}".format(lv[0:2]))

lv[0] = 'Tao'

print("__setitem__()对象返回值:{}".format(lv[0:2]))

print("__delitem__()对象返回值:{}".format(lv[0]))

print("__delitem__()对象返回值(del后):{}".format(lv[0]))

print("__iter__()对象返回值:{}".format(lv)) # 返回的是List

for i in lv:

print("__iter__()对象返回值:{}".format(i))

print("__reversed__()对象返回值:{}".format(lv)) #返回的是List

for ia in reversed(lv):

print("__reversed__()对象返回值:{}".format(ia))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值