首页
学习
活动
专区
圈层
工具
发布
30 篇文章
1
【愚公系列】2021年12月 Python教学课程 01-全方位解读Python
2
【愚公系列】2021年12月 Python教学课程 02-变量
3
【愚公系列】2021年12月 Python教学课程 03-数据类型
4
【愚公系列】2021年12月 Python教学课程 04-字符串
5
【愚公系列】2021年12月 Python教学课程 05-列表List
6
【愚公系列】2021年12月 Python教学课程 06-元组Tuple
7
【愚公系列】2021年12月 Python教学课程 07-字典Dict
8
【愚公系列】2021年12月 Python教学课程 08-基本语法
9
【愚公系列】2021年12月 Python教学课程 09-流程控制-顺序执行
10
【愚公系列】2021年12月 Python教学课程 10-流程控制-条件判断
11
【愚公系列】2021年12月 Python教学课程 11-流程控制-循环控制
12
【愚公系列】2021年12月 Python教学课程 12-Python函数
13
【愚公系列】2021年12月 Python教学课程 13-变量作用域
14
【愚公系列】2021年12月 Python教学课程 14-递归函数
15
【愚公系列】2021年12月 Python教学课程 15-匿名函数
16
【愚公系列】2021年12月 Python教学课程 16-推导式
17
【愚公系列】2021年12月 Python教学课程 17-模块与包
18
【愚公系列】2021年12月 Python教学课程 18-异常处理
19
【愚公系列】2021年12月 Python教学课程 19-面向对象编程-面向对象定义
20
【愚公系列】2021年12月 Python教学课程 20-面向对象编程-类和对象
21
【愚公系列】2021年12月 Python教学课程 21-面向对象编程-特殊成员和魔法方法
22
【愚公系列】2021年12月 Python教学课程 22-面向对象编程-封装、继承、多态
23
【愚公系列】2021年12月 Python教学课程 23-面向对象编程-运算符重载
24
【愚公系列】2021年12月 Python教学课程 24-Python数据库编程
25
【愚公系列】2021年12月 Python教学课程 25-Python文件读写
26
【愚公系列】2021年12月 Python教学课程 26-系统编程
27
【愚公系列】2021年12月 Python教学课程 27-算法
28
【愚公系列】2021年12月 Python教学课程 28-Web开发基础
29
【愚公系列】2021年12月 Python教学课程 29-MVC设计模式
30
【愚公系列】2021年12月 Python教学课程 30-Django简介

【愚公系列】2021年12月 Python教学课程 23-面向对象编程-运算符重载

文章目录

一、运算符重载

运算符重载,是对已有的运算符进行重新定义,赋予其另一种功能,以适应不同的数据类型。运算符重载,是为了让用户自定义的对象能够使用中缀运算符(如+,-,*,&等)或一元运算符(如~)等。

Python 语言提供了运算符重载功能,增强了语言的灵活性。Python 语言本身提供了很多魔法方法,它的运算符重载就是通过重写这些 Python 内置魔法方法实现的。这些魔法方法都是以双下划线开头和结尾的,类似于__X__的形式,python 通过这种特殊的命名方式来拦截操作符,以实现重载。当 Python 的内置操作运用于类对象时,Python会去搜索并调用对象中指定的方法完成操作。

常见运算符重载方法

方法

重构

调用

__init__

构造函数

对象建立:X = Class(args)

__del__

析构函数

X对象收回

__add__

运算符+

如果没有_iadd_, X + Y, X += Y

__or__

运算符(位OR)

如果没有 _ior_, X

__repr__, __str__

打印,转换

print(X), repr(X), str(X)

__call__

函数调用

X(*args, **kargs)

__getattr__

点号运算

X.undefined

__setattr__

属性赋值语句

X.any = value

__delattr__

属性删除

del X.any

__getattribute__

属性获取

X.any

__getitem__

索引运算

X[key], X[i:j], 没__iter__时的for循环和其他迭代器

__setitem__

索引赋值语句

X[key] = value, X[i:j] = sequence

__delitem__

索引和分片删除

del X[key], del X[i:j]

__len__

长度

len(X), 如果没有__bool__, 真值测试

__bool__

布尔测试

bool(X), 真测试(在python2.6中叫做_

__lt__, __gt__

特定比较

X < Y, X > Y, X <= Y, X >= Y

__le__, __ge__

特定比较

X == Y, X != Y

__radd__

右侧加法

other + X

__iadd__

实地(增强的)加法

X += Y (or else add

__iter__, __next__

迭代环境

I = iter(X), next(I); for loops,

__contains__

成员关系测试

item in X(任何可迭代的对象)

__index__

整数值

hex(X), bin(X), oct(X), O[X], O[X:]

__enter__, __exit__

环境管理器

with obj as var:

__get__, __set__

描述符属性

X.attr, X.attr = value, del X.value

__delete__

描述符属性

descr.__delete__(self, obj) –> None

__new__

创建

在__init__之前创建对象

类可以重载加减运算、打印、函数调用、索引等内置运算,运算符重载使我们的对象的行为与内置对象的一样。Python 在调用操作符时会自动调用这样的方法,例如,如果类实现了__add__方法,当类的对象出现在+运算符中时会调用这个方法。

代码语言:javascript
复制
# 先看看原list加号运算符
>>> lst = list()
>>> lst.append(1)
>>> lst
[1]
>>> lst + [2]
>>> lst
[1, 2]

# 重构`+`号运算符方法__add__
class A(list):
    def __add__(self, other):
        print 'Hello, Python.'

>>> newlst = A()
>>> newlst.append(1)
>>> newlst + [2]
Hello, Python.
>>> newlst
[1]

我们在类A中重载了列表+号运算符的方法__add__,它只输出Hello, Python.,所以当我们类A的实例对象newlst调用+号运算符时,并没有像lst一样,添加新的成员,而只是输出字符串(这就是重构运算符方法)。

下一篇
举报
领券