1 # 编辑者:闫龙 2 # 基于授权定制自己的列表类型,要求定制的自己的__init__方法, 3 # 定制自己的append:只能向列表加入字符串类型的值 4 # 定制显示列表中间那个值的属性(提示:property) 5 # 其余方法都使用list默认的(提示:__getattr__加反射) 6 class MyList: 7 def __init__(self,*args):#自定义__init__函数 8 self.list = list(args)#*args会将多个值变为元组,咱们在这里把它再变成列表传递给self.list 9 def __str__(self):#自定义__str__函数 10 return str(self.list)#每次print 的时候显示列表 11 def append(self,x):#自定义append方法 12 if(isinstance(x,str)):#判断将要传入列表的值是否为字符串 13 self.list.append(x) 14 print(x, "已被添加到MyList中") 15 else: 16 raise TypeError("只可以传入字符串")#主动抛出类型错误异常 17 def __getattr__(self, item):#当在MyList中未找到传入的name时调用此方法 18 return getattr(self.list,item)#其他未实现的方法,使用list自身的方法 19 @property 20 def whoiscenter(self):#根儿哥这个文化底蕴啊,真是要了亲命了,半天没看懂 21 #定制显示列表中间那个值的属性(提示:property) 22 #你TMD就不会个断句吗?来,哥教你:指定,显示列表中间值,的属性(使用property实现) 23 return self.list[len(self.list)//2] 24 25 ml = MyList(1,2,3) 26 ml.append("4") 27 ml.pop(0)#验证__getattr__是否成功 28 print(ml)