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)

 

查看原文