Python中常见运算符重载方法

来源:互联网 发布:mac双语播放器 编辑:程序博客网 时间:2024/06/05 19:01

在类中,对内置对象(例如:整数和列表)所能做的事,几乎都有相应的特殊名称的重载方法。最常见的就是重载类的构造函数(__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一样,添加新的成员,而只是输出字符串(这就是重构运算符方法)。

0 0
原创粉丝点击