python笔记
Bamboo Lv3

运算符重载

python的运算符用于内置类,但是相同的运算符对不同类型有不同的行为,python中的这一功能允许同一运算符根据上下文具有不同的语义,称为运算符过载。

Python中的特殊函数

以双下划线__开头的类函数在Python中称为特殊函数。每次我们创建该类的新对象时都会调用它。Python中有很多特殊函数。

在类中定义 __str()__方法,可以控制他的打印输出方式。

1
2
3
4
5
6
7
class Point:
def __init__(self, x = 0, y = 0):
self.x = x
self.y = y

def __str__(self):
return "({0},{1})".format(self.x,self.y)

try:

1
2
3
>>> p1 = Point(2,3)
>>> print(p1)
(2,3)

重载 +(实现 __add__()函数)

1
2
3
4
5
6
7
8
9
10
11
12
class Point:
def __init__(self, x = 0, y = 0):
self.x = x
self.y = y

def __str__(self):
return "({0},{1})".format(self.x,self.y)

def __add__(self,other):
x = self.x + other.x
y = self.y + other.y
return Point(x,y)

try:

1
2
3
4
>>> p1 = Point(2,3)
>>> p2 = Point(-1,2)
>>> print(p1 + p2)
(1,5)

python运算符重载的特殊函数

运算符 表达 在内部
相加(+) p1 + p2 p1 .__ add __(p2)
相减(-) p1-p2 p1 .__ sub __(p2)
相乘(*) p1 * p2 p1 .__ mul __(p2)
求幂(**) p1 ** p2 p1 .__ pow __(p2)
相除(/) p1 / p2 p1 .__ truediv __(p2)
整除(//) p1 // p2 p1 .__ floordiv __(p2)
求模 (%) p1%p2 p1 .__ mod __(p2)
按位左移(<<) p1 << p2 p1 .__ lshift __(p2)
按位右移(>>) p1 >> p2 p1 .__ rshift __(p2)
按位与(and) p1 and p2 p1 .__ and __(p2)
按位或(or) p1 | 2 p1 .__ or __(p2)
按位异或(^) p1 ^ p2 p1 .__ xor __(p2)
按位否(~) 〜p1 p1 .__ invert __()

比较运算符重载

操作符 表达式 内部
小于(<) p1 <p2 p1 .__ lt __(p2)
小于等于(<=) p1 <= p2 p1 .__ le __(p2)
等于(==) p1 == p2 p1 .__ eq __(p2)
不等于(!=) p1!= p2 p1 .__ ne __(p2)
大于(>) p1> p2 p1 .__ gt __(p2)
大于等于(>=) p1> = p2 p1 .__ ge __(p2)
Powered by Hexo & Theme Keep
Total words 28.5k Unique Visitor Page View