知识回顾:
1.内建类:之间学习过list 、 dict 、 str
2.使用内建类好处:大大提高开发效率;实现内建类中一些已经有的方法。
3.使用list和dict在做自定义类的时候,需要实现__init__构造方法。
一、字典类的补充
使用双星号传入的情况的不同,以下举例:
class MyDict(dict):
def __init__(self,**args):
# print(args)
return super().__init__(**args)
md=MyDict(**{"a":"老刘","b":"老张","c":"老王"})
print(md)
二、字典中的get情况
使用get的好处就是如果键不存在字典中,也不会报错,但是不会触发___getitem__这个魔法方法。使用名称[键]的方式进行获取的时候 ,虽然当键不存在的时候会报错,但是会触发__getitem__方法,触发这个方法的好处就是我们可以自定义这个方法,使得实现我们想要的功能。
三、列表自带的reverse与reversed函数区别
使用列表自带的reverse()方法会改变变量本身的值。而使用python中的类方法reversed()方法的话,则不会改变原来变量的值,往往这个方法使用后需要将返回值存入一个变量中。
四、自定义字符串类
本节知识中 ,我们这里利用字符串内建类str的形式来实现。举例实现,使用自定义分隔符来隔离传入的各个字符串,我们这里开始实现一个属于自己的自定义字符串类。
新知识:使用类中的__new__魔法方法
这个方法的作用:就是在类的__init__魔法方法执行之前,就开始执行。即:类进行实例化对象前就执行的方法(__new__)
提问:如何去除最后多余的分隔符?
使用字符串的分片功能来实现,以下举例实现:
index=-len(sep)
if(index==0):
index=len(s)
return str.__new__(cls,s[:index])
五、总结强调
1.掌握自定义类的定义与使用
2.掌握自定义字典类的注意方式
3.掌握使用自定义字符串类的方法表述
4.理解__new__方法的执行顺序位置
源代码1:
class MyDict(dict): def __init__(self,**args): # print(args) return super().__init__(**args) def __getitem__(self, item): print("调用了") return super().__getitem__(item) md=MyDict(**{"a":"老刘","b":"老张","c":"老王"}) print(md) #注意两种调用方法的不同点,触发情况不一样 # print(md.get("b")) #print(md["b"])
源代码2:
class MyString(str): def __new__(cls, *args, sep=" "): # print(cls) # print(args) s = "" for v in args: s += v + sep # print(s) index=-len(sep) if(index==0): index=len(s) return str.__new__(cls,s[:index]) def __init__(self,*args,sep=" "): # print(args) pass ms=MyString("a","b","c",sep="") print(ms)