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)
发表评论