python(29)- 面向对象练习Ⅲ

题目:

  基于授权定制自己的列表类型,要求定制的自己的__init__方法,
    定制自己的append:只能向列表加入字符串类型的值
      定制显示列表中间那个值的属性(提示:property)
      其余方法都使用list默认的(提示:__getattr__加反射)

class List:
    def __init__(self,x):
        self.seq=x  #self.seq=[l,2,3]

    def append(self,item):
        if not isinstance(item,str):
            raise TypeError("must be str")
        self.seq.append(item)   #此时self为类List实例化后f 传值给self,self.seq为调用__init__下的self.seq=[l,2,3],故表达式为[1,2,3].append(item)

    @property
    def mid(self):
        index=len(self.seq)//2
        return self.seq[index]     #此时self为类List实例化后f 传值给self,self.seq为调用__init__下的self.seq=[l,2,3],故表达式为[1,2,3][index]

    def __getattr__(self, item):    #f.insert(0,111111),此时f 赋值给self,insert(0,111111)赋值给item;f.pop(1),此时f 赋值给self,pop(1)赋值给item
        print("你所查找的属性未定义")
        return getattr(self.seq, item)


x=[1,2,3]
f=List(x)
f.append("4")
print(f.seq)    #等同于print(x)
--->[1, 2, 3, '4']

print(f.mid)
--->3

f.insert(0,111111)
print(f.seq)
--->[111111, 1, 2, 3, '4']

f.pop(1)
print(f.seq)
--->[111111, 2, 3, '4']

  

原文地址:https://www.cnblogs.com/xuyaping/p/6763434.html