Python语言提供了运算符重载功能,增强了语言的灵活性。
Python语言本身提供了很多魔法方法,运算符重载就是通过重写这些内置魔法方法实现的。
这些魔法方法都是以双下划线开头和结尾的,类似于__X__的形式,Python通过这种特殊的命名方式来拦截操作符,以实现重载。当Python的内置操作运用于类对象时,Python会去搜索并调用对象中指定的方法完成操作。
数字与字符串相加
不同的类型相加会有不同的结果。
示例如下:
print(1 + 2)
print('1' + '2')
# 执行结果
# 3
# 12
对象的相加
对象的加法 需用运算符重载才有结果
示例如下:
class Person(object):
def __init__(self, num):
self.num = num
# 运算符重载
def __add__(self, other):
return Person(self.num + other.num)
def __str__(self):
return 'num = ' + str(self.num)
print(1 + 2)
print('1' + '2')
# 不同的类型用加法会有不同的结果
# 对象的加法 需用运算符重载才有结果
p1 = Person(2)
p2 = Person(5)
print(p1 + p2) # p1 + p2 ==== p1.__add__(p2)
重载方法
重载方法列表如下:
|
Method |
Overload |
Call |
|
__init__ |
构造函数 |
对象创建:x = class(args) |
|
__del_ |
析构函数 |
x对象收回 |
|
__add__ |
运算符+ |
如果没有_iadd_,X+Y,X+=Y |
|
__or__ |
运算符| |
如果没有_ior_,XIY,XI=Y |
|
__repr__,__str__ |
打印、转换 |
print(X),repr(X),str(X) |
|
__call__ |
函数调用 |
X(*args,**kwargs) |
|
__getattr__ |
点号运算 |
X.undefined |
|
__setattr__ |
属性赋值语句 |
X.any=value |
|
__dellattr__ |
属性删除 |
del X.any |
|
__getattribute__ |
属性获取 |
X.any |
|
__getitem__ |
索引运算 |
X[key],X[i:j] |
|
__setitem__ |
索引赋值语句 |
X[key],X[i:j]=sequence |
|
__delitem__ |
索引和分片删除 |
del X[key],del X[i:j] |
|
__len__ |
长度 |
len(X),如果没有_bool_,真值测试 |
|
__bool__ |
布尔测试 |
bool(X) |
|
__lt__,__gt__ __le__, __ge__ __eq__,__ne__ |
特定比较 |
X<Y,X>Y、X<=Y,X>=Y,X==Y,X!=Y |
|
__radd__ |
右侧加法 |
other+X |
|
__Iadd__ |
实地(增强的)加法 |
X+=Y(or else __add__) |
|
__iter_, _next__ |
迭代环境 |
I=iter(X), next() |
|
__contains__ |
成员关系测试 |
item in X(任何可迭代) |
|
__index__ |
整数值 |
hex(X), bin(X),oct(x) |
|
__enter__,___exit__ |
环境管理器 |
with obj as var: |
|
__get_,__set__,__delete__ |
描述符属性 |
X.attr, X.attr=value, del X.attr |
|
__new__ |
创建 |
在_init_之前创建对象 |
总结
Python 面向对象运算符的内容整理
本文介绍了Python中的运算符重载功能,通过重写内置魔法方法如__add__和__str__实现对象的自定义加法和打印行为。同时概述了对象相加、重载方法列表以及Python面向对象编程的相关内容。
781

被折叠的 条评论
为什么被折叠?



