Python中的操作符重载

类可以重载python的操作符

操作符重载使我们的对象与内置的一样。__X__的名字的方法是特殊的挂钩(hook),python通过这

种特殊的命名来拦截操作符,以实现重载。 python在计算操作符时会自动调用这样的方法,例如:

如果对象继承了__add__方法,当它出现在+表达式中时会调用这个方法。通过重载,用户定义的对

象就像内置的一样。

在类中重载操作符

1、操作符重载使得类能拦截标准的python操作。

2、类可以重载所有的python的表达式操作符。

3、类可以重载对象操作:print,函数调用,限定等。

4、重载使得类的实例看起来更像内置的。

5、重载是通过特殊命名的类方法来实现的。

方法名        重载的操作说明
       调用表达式

__init__    构造函数
       创建对象:class()

__del__        析构函数
       释放对象的时候

__add__        “+”
           x + y

__or__        “|”
           x | y

__repr__    打印,转换
       print x, `x`

__call__    函数调用
       X()

__getattr__    属性引用
       x.undefined

__getitem__    索引
           x[key],for循环,in测试

__setitem__    索引赋值
       x[key] = value

__getslice__    分片
           x[low:high]

__len__        长度
           len(x)

__cmp__        比较
           x == Y ,x <
y

__radd__    右边的操作符"+"
       非实例 + x

例子:

__getitem__拦截了所有的索引操作

>>> class indexer:

def __getitem__(self,index):

return index ** 2

>>> x = indexer()

>>> for i in range(5):

print x[i]    #x[i]将调用__getitem__(x,i)

0

1

4

9

16

Python中的操作符重载,布布扣,bubuko.com

时间: 2024-12-23 00:45:28

Python中的操作符重载的相关文章

Groovy中的操作符重载

操作者 方法 a + b a.plus(b)中 a - b a.minus(b)中 a * b a.multiply(b)中 a ** b a.power(b)中 a / b a.div(b)中 a % b a.mod(b)中 a | b a.or(b)中 a & b a.and(b)中 a ^ b a.xor(b)中 a++ 要么 ++a a.next() a-- 要么 --a a.previous() a[b] a.getAt(b)中 a[b] = c a.putAt(b,c) a <&

python中函数重载和重写

python 中的重载??在python中,具有重载的思想却没有重载的概念.所以有的人说python这么语言并不支持函数重载,有的人说python具有重载功能.实际上python编程中具有重载的目的缺无重载的行为,或者说是python并不需要重载!??python是一门动态语言,不需要声明变量类型,函数中可以接受任何类型的参数也就无法根据参数类型来支持重载,python没有必要去考虑参数的类型问题,这些都可以在函数内部判断处理,并无必要去在写一个函数.python 有多种传参方式,默认参数/可变

Python 3 之 运算符重载详解

基础知识 实际上,"运算符重载"只是意味着在类方法中拦截内置的操作--当类的实例出现在内置操作中,Python自动调用你的方法,并且你的方法的返回值变成了相应操作的结果.以下是对重载的关键概念的复习: 运算符重载让类拦截常规的Python运算. 类可重载所有Python表达式运算符 类可以重载打印.函数调用.属性点号运算等内置运算 重载使类实例的行为像内置类型. 重载是通过特殊名称的类方法来实现的. 换句话说,当类中提供了某个特殊名称的方法,在该类的实例出现在它们相关的表达式时,Pyt

C++学习笔记-操作符重载

操作符重载(operator overloading)是一种形式的C++多态,C++将操作符重载扩展到用户自定义的类型,如允许使用+将两个自定义的对象相加,编译器将根据操作数的数目和类型决定使用那种加法定义. 要重载操作符,需使用操作符函数,格式如下: operator op (argument-list) op:要重载的操作符 argument-list: 操作数 操作符函数可以是类的成员函数,也可以是友元函数,如果是类成员函数,则第一个操作数是调用对象,它不在argument-list中.

C++语言学习(八)——操作符重载

C++语言学习(八)--操作符重载 一.操作符重载基础 1.操作符重载的语法 通过operator关键字可以定义特殊的函数,operator本质是通过函数重载操作符. Type operator operatorname(const Type p1, const Type p2) { Type ret; return ret; } 2.友元函数重载操作符 可以将操作符重载函数声明为友元函数. #include <iostream> using namespace std; class Comp

第30课 操作符重载的概念

需要解决的问题: 第一种解决方案: 运行结果如下: 上图中将a和b定义成公有的暴露出来不符合面向对象封装的原则. 第二种方案如下: 虽然解决了复数相加的问题,但是并不完美,显得不自然,我们能否使用c1+c2的这种方式呢? 思考: 操作符重载: 重载的深层次意义就在于可以扩展系统已经存在的功能. 用operator定义的函数就直接用来重载操作符了. 示例: 1 #include <stdio.h> 2 3 class Complex 4 { 5 int a; 6 int b; 7 public:

C++解析(17):操作符重载

0.目录 1.操作符重载 2.完善的复数类 3.小结 1.操作符重载 下面的复数解决方案是否可行? 示例1--原有的解决方案: #include <stdio.h> class Complex { int a; int b; public: Complex(int a = 0, int b = 0) { this->a = a; this->b = b; } int getA() { return a; } int getB() { return b; } friend Compl

C++--操作符重载 复数类

一.操作符重载 Q:下面的复数解决方案是否可行? class Complex { public: int a; int b; }; int main() { Complex c1={1,2}; Complex c2={3,4}; Complex c3=c1+c2; return 0; } 该段代码想要实现的是将两个复数类进行相加得出第三个类代码实现的运行结果由上面的结果图可以得知,出现的错误是无法匹配+号操作符的操作,同时出现 的潜在问题是a与b是public成员,在实际的操作中应将a与b设置为

python——操作符重载(重要)

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