Python 面向对象之运算符重载

发布时间:2024年01月18日

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 面向对象运算符的内容整理

文章来源:https://blog.csdn.net/json_ligege/article/details/135666264
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。