Python中常见运算符重载方法

在类中,对内置对象(例如:整数和列表)所能做的事,几乎都有相应的特殊名称的重载方法。最常见的就是重载类的构造函数(__init__函数)

方法重构调用
__init__构造函数对象建立:X = Class(args)
__del__析构函数X对象收回
__add__运算符+如果没有_iadd_, X + Y, X += Y
__or__运算符|(位OR)如果没有 _ior_, X | Y, X |= Y
__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__之前创建对象

下面我们看一个例子,重构列表中+运算符, 变成只打印: Hello, Python.

# 先看看原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一样,添加新的成员,而只是输出字符串(这就是重构运算符方法)。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值