Python学习之路15——魔法方法1

算术运算符

__add__(self, value, /)             定义加法的行为:+
__sub__(self, value, /)             定义减法的行为:-
__mul__(self, value, /)             定义乘法的行为:*
__truediv__(self, value, /)         定义真除法的行为:/
__floordiv__(self, value, /)        定义整除法的行为://
__mod__(self, value, /)             定义取模运算的行为:%
__divmod__(self, value, /)          定义当被divmod调用时的行为:divmod(self, value)
__pow__(self, value, mod=None, /)   定义幂运算的行为:** 或当被pow调用时的行为:pow(self, value, mod)
__lshift__(self, value, /)          定义按位左移操作的行为:<<
__rshift__(self, value, /)          定义按位右移操作的行为:>>
__and__(self, value, /)             定义按位与操作的行为:&
__or__(self, value, /)              定义按位或操作的行为:|
__xor__(self, value, /)             定义按位异或操作的行为:^
# 定义复数类的加法运算符
>>> class Complex:
        def __init__(self, x=0, y=0):
	    self.x = x
	    self.y = y
	def __add__(self, value):
	    x = self.x + value.x
	    y = self.y + value.y
	    return Complex(x, y)
	def show(self):
	    if self.y>0:
	    	print('%d+%di' % (self.x, self.y))
	    elif self.y==0:
	        print('%d' % self.x)
	    else:
	        print('%d%di' % (self.x, self.y))

>>> a = Complex()
>>> b = Complex(1)
>>> c = Complex(2,3)
>>> d = Complex(-2,-5)
>>> f = a + b
>>> f.show()
1
>>> f = a + c
>>> f.show()
3+3i
>>> d.show()
-2-5i

反运算

__radd__(self, value, /)             当左操作数不支持相应运算时被调用
__rsub__(self, value, /)             当左操作数不支持相应运算时被调用
__rmul__(self, value, /)             当左操作数不支持相应运算时被调用
__rtruediv__(self, value, /)         当左操作数不支持相应运算时被调用
__rfloordiv__(self, value, /)        当左操作数不支持相应运算时被调用
__rmod__(self, value, /)             当左操作数不支持相应运算时被调用
__rdivmod__(self, value, /)          当左操作数不支持相应运算时被调用
__rpow__(self, value, mod=None, /)   当左操作数不支持相应运算时被调用
__rlshift__(self, value, /)          当左操作数不支持相应运算时被调用
__rrshift__(self, value, /)          当左操作数不支持相应运算时被调用
__rand__(self, value, /)             当左操作数不支持相应运算时被调用
__ror__(self, value, /)              当左操作数不支持相应运算时被调用
__rxor__(self, value, /)             当左操作数不支持相应运算时被调用
# 定义反运算
>>> class int(int):
	def __radd__(self, value):
	    return int.__sub__(self, value)

>>> a = int(2)
>>> b = int(3)
>>> a + b   # 调用a的add方法
5
>>> 2 + b   # 调用b的radd方法
1

增量赋值运算

__iadd__(self, value, /)             定义赋值加法的行为:+=
__isub__(self, value, /)             定义赋值减法的行为:-=
__imul__(self, value, /)             定义乘法的行为:*=
__itruediv__(self, value, /)         定义真除法的行为:/=
__ifloordiv__(self, value, /)        定义整除法的行为://=
__imod__(self, value, /)             定义取模运算的行为:%=
__ipow__(self, value, mod=None, /)   定义赋值幂运算的行为:**=
__ilshift__(self, value, /)          定义赋值按位左移操作的行为:<<=
__irshift__(self, value, /)          定义赋值按位右移操作的行为:>>=
__iand__(self, value, /)             定义赋值按位与操作的行为:&=
__ior__(self, value, /)              定义赋值按位或操作的行为:|=
__ixor__(self, value, /)             定义赋值按位异或操作的行为:^=

一元操作符

__neg__(self, /)        定义正号的行为:+X
__pos__(self, /)        定义负号的行为:-X
__abs__(self, /)        定义当被abs()调用时的行为
__invert__(self, /)     定义按位求反的行为:~X

类型转换

__complex(self, /)      定义当被 complex() 调用时的行为(需要返回恰当的值)
__int__(self, /)        定义当被 int() 调用时的行为(需要返回恰当的值) 
__float__(self, /)      定义当被 float() 调用时的行为(需要返回恰当的值)
__round__(self[, n])    定义当被 round() 调用时的行为(需要返回恰当的值)
__index__(self, /)      1. 当对象是被应用在切片表达式中时,实现整形强制转换
                        2. 如果你定义了一个可能在切片时用到的定制的数值型,你应该定义 __index__
                        3. 如果 __index__ 被定义,则 __int__ 也需要被定义,且返回相同的值

比较运算符

__lt__(self, other, /)     定义小于号的行为:x < y 调用 x.__lt__(y) 
__le__(self, other, /)     定义小于等于号的行为:x <= y 调用 x.__le__(y) 
__eq__(self, other, /)     定义等于号的行为:x == y 调用 x.__eq__(y) 
__ne__(self, other, /)     定义不等号的行为:x != y 调用 x.__ne__(y) 
__gt__(self, other, /)     定义大于号的行为:x > y 调用 x.__gt__(y) 
__ge__(self, other, /)     定义大于等于号的行为:x >= y 调用 x.__ge__(y)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值