python难点解析---当涉及类时的魔法方法

参考:小甲鱼视频

作用:对类进行“刷机”级的修改

魔法方法的标志:①被__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


猜你喜欢

转载自blog.csdn.net/tommy1295/article/details/80718159