Python中的操作符重载

关于Python中的操作符重载,可以查看2.7.3文档地址:

http://docs.python.org/reference/datamodel.html#special-method-names

或者一篇详细的中文教程:

Python 魔术方法指南

类可以重载python的操作符,操作符重载使我们的对象与内置的一样。__X__的名字的方法是特殊的挂钩(hook),python通过这种特殊的命名来拦截操作符,以实现重载。 python在计算操作符时会自动调用这样的方法,例如:如果对象继承了__add__方法,当它出现在+表达式中时会调用这个方法。通过重载,用户定义的对象就像内置的一样。

在类中重载操作符

  1. 操作符重载使得类能拦截标准的python操作。
  2. 类可以重载所有的python的表达式操作符。
  3. 类可以重载对象操作:print,函数调用,限定等。
  4. 重载使得类的实例看起来更像内置的。
  5. 重载是通过特殊命名的类方法来实现的。

魔术方法、调用方式、解释:

  • __new__(cls [,…])

instance = MyClass(arg1, arg2)
__new__ 在创建实例的时候被调用

  • __init__(self [,…])

instance = MyClass(arg1, arg2)
__init__ 在创建实例的时候被调用

  • __cmp__(self, other)

self == other, self > other, 等。
在比较的时候调用

  • __pos__(self)

+self
一元加运算符

  • __neg__(self)

-self
一元减运算符

  • __invert__(self)

~self
取反运算符

  • __index__(self)

x[self]
对象被作为索引使用的时候

  • __nonzero__(self)

bool(self)
对象的布尔值

  • __getattr__(self, name)

self.name # name 不存在
访问一个不存在的属性时

  • __setattr__(self, name, val)

self.name = val
对一个属性赋值时

  • __delattr__(self, name)

del self.name
删除一个属性时

  • __getattribute__(self, name)

self.name
访问任何属性时

  • __getitem__(self, key)

self[key]
使用索引访问元素时

  • __setitem__(self, key, val)

self[key] = val
对某个索引值赋值时

  • __delitem__(self, key)

del self[key]
删除某个索引值时

  • __iter__(self)

for x in self
迭代时

  • __contains__(self, value)

value in self, value not in self
使用 in 操作测试关系时

  • __concat__(self, value)

self + other
连接两个对象时

  • __call__(self [,…])

self(args)
“调用”对象时

  • __enter__(self)

with self as x:
with 语句环境管理

  • __exit__(self, exc, val, trace)

with self as x:
with 语句环境管理

  • __getstate__(self)

pickle.dump(pkl_file, self)
序列化

  • __setstate__(self)

data = pickle.load(pkl_file)
序列化

例子:

 

调用结果:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蚂蚁学Python

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值