Python练习-基于授权方式包装list之与根儿哥必有一战

 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)
原文地址:https://www.cnblogs.com/DragonFire/p/6758114.html