2019/11/19 04-运算符重载

在这里插入图片描述
运算符重载,__eq__代表==,加减乘除,取模,整除,都可以

//对应__floordiv(地板除,向下)__ 向下取整 ,/对应__truediv__真除,该带小数就带小数、
divmod 对应__divmod__连取商带取余都一起拿了

lt=less than小于 le=less equal 小于等于
eq= 等于
gt =great than大于
ge =大于等于
ne=不等于

在这里插入图片描述
这里面的开头字母i代表inplace,就地修改的意思,用了这些东西,就很方便再python里面实现两个实例的相加相等在这里插入图片描述
这种就相当于运算符重载
在这里插入图片描述
如果想要直接使用-减号,就可以用sub在这里插入图片描述
现在就出来年龄相减了
在这里插入图片描述
如果没有,就告诉你,这两个类型无法相减在这里插入图片描述
只要把这个符号,重载的方法重新定义,除了self,其他所有的魔术方法都跟self有关,一般除非不得已,不建议在类上进行操作,具体操作的时候是对实例的进行操作
类是所有 实例共享的东西,放一些公共的数据
更多的应该去使用实例的属性,把类抽象成一个实例,在实例的字典上存这些数据,

在这里插入图片描述在这里插入图片描述
写一下isub试试,-=的话就是 。tom.isub(jerry),如果没有isub,就相当于tom=tom-jerry(调用了__sub__)
在这里插入图片描述
如果是tom -= Jerry会先调用了isub,把返回值赋值给tom在这里插入图片描述
tom -=相当于tom被后面返回的覆盖掉了,如何把tom原来的值保留,比如name
这样就返回的还是tom本身
在这里插入图片描述
还有一种方案
self.__class__把类型拿到(xxxxx),相当于把这个类做初始化,自己的self.name放进去,构造了一个新实例,这个新实例把tom顶掉了,

在这里插入图片描述
这两个tom实例,是不同的地址变了
在这里插入图片描述
如果有的方法在前面写过了,下面可以大胆用写过的实例来减,这一减相当于调用的就是__sub__
拿到class相当于可以构造一个实例
在这里插入图片描述
写死A也可以在这里插入图片描述
这样就跟当前实例有关
在这里插入图片描述
这种减法相当于两个A实力的减法,两个A实例的减法就会调用__sub__
在这里插入图片描述
一般两个类型操作以后是得到同一类型数据,+=一般是就地需改,
在这里插入图片描述在这里插入图片描述在这里插入图片描述
完成一个向量的加法
这样一种返回新的,一种inplace都可以,从用户的角度感觉是感觉不出来

在这里插入图片描述在这里插入图片描述在这里插入图片描述
object只能比较地址
在这里插入图片描述
如果提供了__eq__,object就不知道你怎么比较,x=x,y=y,同时等于中间加上and
在这里插入图片描述
可否比较大小,现在提示两个point实例怎么比较大小,缺小于号
在这里插入图片描述
**sorted没办法对自定义的类进行排序,必须告诉它用什么排序,应该提供 一些方法来帮它排序
不同类型的实例间无非就是等还是不等的问题,但是是否可以比较大小
不同类型之间如下,可以知道等还是不等的 **
在这里插入图片描述
这样是p1__eq__了,所以相等在这里插入图片描述在这里插入图片描述提示>=不支持
在这里插入图片描述
知道了等等,就知道了不等,但是不知道谁大谁小

装饰器讲过,用这个,所有的排序都可以搞定
在这里插入图片描述
提示至少给大于小于在这里插入图片描述
给一个__gt__,这么写不符合数学,但是先这么写在这里插入图片描述
现在简单点,就看x轴谁大谁小
3>3返回false
在这里插入图片描述

把__eq__恢复
在这里插入图片描述
现在就开始比较大小
在这里插入图片描述
如果这么用装饰器写两个就够了
在这里插入图片描述
把装饰器的#号去掉
在这里插入图片描述在这里插入图片描述
这样就解决了6种在这里插入图片描述
有了大等推算小等,有了等推算不等,加了装饰器,需要在大等,小等,小于,大于之间选一个写出来,剩下的4个找一个

point看不出来就用repr打印出来看看
在这里插入图片描述
3,4在后面
在这里插入图片描述在这里插入图片描述
自定义的类型是可以排序的,排序必须比较大小。所以把比较大小提供一下就ok,运算符重载在这里插入图片描述
提供一个+号的重载,更加符合使用者的习惯
比如pathlib,使用”/“把路径组合起来
在这里插入图片描述在这里插入图片描述在这里插入图片描述
装饰器看起来好,但是有可能有性能问题,少用这个装饰器在这里插入图片描述
不用装饰器,写三个即可
在这里插入图片描述
也就是用这三个方法就可以推断出来
所以装饰器可以不使用

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值