zoukankan      html  css  js  c++  java
  • 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))
  • 相关阅读:
    grpc stream剖析
    Pravega架构小结
    Flink之对时间的处理
    一张图说清楚Flink水印和Lateness
    Flink kuduSink开发
    Axsure动态面板下不同状态页面间的交互
    Axsure制作图片动态验证码
    透过用户思维谈程序员的进阶之路
    redis整合Spring之序列化对象与反序列化
    Java基础面试题
  • 原文地址:https://www.cnblogs.com/Teachertao/p/14033608.html
Copyright © 2011-2022 走看看