Python魔法⽅法(在合适的时间,python⾃动调⽤如下⽅法魔
法⽅法)
此前我们已经解除了Python中最常⽤的魔法⽅法:__init__
什么时候调⽤__init__?答:我们想在对象实例化的时候就赋某些值就重写它呗!就是看需求,有需要就重写,没需要就不重写呗,不重写就是啥也没有呗!嗯~对的!
*__init__(self[,...])
__init__是不可以设置返回值的,他只能默认的返回None,如果试图给它设置返回值,会出现TypeError的异常
*__new__(cls[,...])
实际上实例化⼀个类的时候第⼀个调⽤的不是__init__⽅法,⽽是这个__new__⽅法
·他和其他实例化⽅法不同,他的第⼀个参数是类和self⼀样就写cls,如果后⾯有参数,后⾯的参数会原封不动的传给__init__⽅法
·__new__返回⼀个实例对象,可以是这个类的实例对象也可以是其他类的实例对象
·⼀般情况下我们极少的会去重写这个__new__⽅法
·但是在继承了不可改变的⽗类的时候,new⽅法就显得尤为重要了
因为init只能返回None,因此我们设置这个new去掉⽤不可改变的⽗类中的⽅法,如下我想把所有的字符串都变成⼤写显⽰
我发现这样写也⾏[但是上⽅那样还写,只修改了传⼊的string,⽽其他的str⽅法继续⽤,⽽下⽅的可能就没了把,不太清楚,如果⽤还是按照上⽅那样⽤]
实际上通过__init__⽅法也可以实现,只不过不能直接返回,⽽是通过函数调⽤出来,但是他不调⽤
⽅法,实例化返回的还是aaa,⽽new实例化返回的就是我们所设定好的全部⼤写了!!,可见还是有很⼤区别的。
*__del__(self)
当对象【内存】被销毁的时候,这个⽅法会被⾃动的调⽤
他是当垃圾回收机制回收的时候,他才会调⽤这个对象的del⽅法,因此下图等号不成了(并不是我们调⽤del⽅法,他就会调⽤
__del__⽅法)
⼯⼚函数
~~~算数运算~~~~【个⼈觉得这东西知道怎么⽤即可,随着学习的深⼊可能以后会⽤到】
当你调⽤加法是会⾃动调⽤__add__⽅法,调⽤减法的时候会⾃动调⽤__sub__⽅法...
但是注意了,下图这样会报错【报错的原因是⽆线递归,因为self是实例化对象,other是执⾏⽅法是另⼀个参数对象,⽽self是由这个
类实例化的,因此当执⾏到(return self + other)的时候,会调⽤__add__⽅法,如此⼀直调⽤,停不下来!】
解决⽅法:将self转化成int,不当成这个类的对象,则不会调⽤该类的__add__⽅法了
什么是反运算呢?
如a+b,⽽a没有__add__⽅法,则会执⾏b的__radd__⽅法:
如下图:数字1没有__add__⽅法,因此会执⾏a对象中的的__radd__⽅法 #如果俩个都是数字没有,个⼈理解是默认是int,但是这个int优先级⽐Nint低,为什么呢?因为Nint继承⾃int,⽽int内置⽅法没有写出来,优先级⽐较低,直接写出来的radd⽅法优先级⾼。先这样写看看以后怎么说
下图中在(1+a)中调⽤radd⽅法的self指的就是a对象,⽽other才是1
增量赋值运算
实例化类和实例化对象 简单定制
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论