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']