参考:小甲鱼视频
作用:对类进行“刷机”级的修改
魔法方法的标志:①被__xxx__两条下划线包围:如典型的__init__
1.__init__(self,....)
问:在定义类的时候,为什么有的时候有这个魔法方法,有的时候没有呢?
答:一般都会有,但是如果不需要传入类的属性参数,那么就不需要有啊
另外注意 在__init__方法的里面不可以写return返回任何东西
2.__new__(self,...) 类里面最先执行的魔法方法,比__init__还先,注意他的参数和init 的参数一模一样!!!
一般很少修改,但是有一种情况下:
>>> class Calstr(str): def __new__(cls,string): #在这里 cls的位置是填str类的别名可以随意取,不构成参数,第二个string参数则特质str类里的传入字符串不能改 string=string.upper() return str.__new__(cls,string) # 改变父类的__new__ 参数string 同时也是 __init__(self,string)的参数 >>> a=Calstr('aaaaaa') >>> a 'AAAAAA'
①优先运行:这里看到运行Calstr()就自动执行new方法了,不用a.__new__什么的。
②重写不可改变的方法:继承str这个不可改变的类,所以不可以在init里修改str类,但是我们可以在之前的new里面重写 返回新的 str.__new__( )这个方法执行的结果。也可以在参数赋值给init属性之前,判断参数是不是合理的先行函数。
③_注意在使用new方法的时候,调用了父类的new方法,并且返回了这个值,使用return语句
当不使用return的时候,那么此值会变成为None,也就是默认情况下返回值为None。
3. https://www.bilibili.com/video/av4050443/?p=42