• 爱根,深沉。。。基于授权定制列表类型!


    # 1、基于授权定制自己的列表类型,要求定制的自己的__init__方法,
    # 2、定制自己的append:只能向列表加入字符串类型的值,
    # 3、定制显示列表中间那个值的属性(提示:property),
    # 4、其余方法都使用list默认的(提示:__getattr__加反射)。
    class List:
        def __init__(self,type,default=[]):     #输入需要列表的数据类型,如果不想输入的话,默认为空列表。
            self.type=type
            self.res=default                    #这一步需要调用property下面的res函数。
        @property
        def res(self):
            return self.__res                   #这下返回的是self.__res,将self.res封装了起来。
        @res.setter
        def res(self,value):                    #定义setter,在实例的定义阶段就调用,因为property的优先级大于对象自己的数据属性,限制输入的类型必须为list。
            if not isinstance(value,list):
                raise TypeError("输入类型不对!")
            self.__res=value                    #这时赋值给self.__sex。
        def append(self,value):                 #定义函数,判断输入的值类型是不是规定的。
            if not isinstance(value,self.type):
                raise TypeError("输入类型不对!")
            self.__res.append(value)            #加到列表中。
        @property
        def midtype(self):                      #这是查看中间值的属性,可以直接用了就。
            return self.res[int(len(self.__res)/2)]
        def __getattr__(self, item):            #在对象找不到将要调用的属性时,会触发这个函数的运行。
            return getattr(self.__res,item)     #return的是self.res即列表类型授权的方法。
        def __str__(self):                      #这是在打印a的时候,return的是一个字符串,而不是让人看不懂的对象内存地址。
            return "%s"%self.__res
    # a=List(str,[1,2,3])
    # print(a.type)
    # print(a.res)
    # print(a.midtype)
    # a.append("bbbbbbbbbb")
    # print(a)
    # a.insert(0,"aaaaaaaaaa")
    # print(a)
  • 相关阅读:
    按钮设计
    图标设计
    滤镜与通道
    路径、形状工具与选区
    类的无参方法
    类和对象
    阅读器关闭时尝试调用Read无效时的解决方法
    进入ASP .net mvc的世界
    linux命令-vim
    linux命令-分区表fstab
  • 原文地址:https://www.cnblogs.com/chedanlangren/p/6759376.html
Copyright © 2020-2023  润新知