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

类可以重载python的操作符

旧认识:__X__的名字 是系统定义的名字;是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

时间: 2024-10-14 00:57:21

python——操作符重载(重要)的相关文章

Python中的操作符重载

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

转:python 操作符学习

python的操作符大部分和java是相同的,功能相近,运算符等级也差不多,这篇blog就来学习python 操作符: python与java的操作符 python java 描述 or || 逻辑或 and && 逻辑与 not ! 逻辑非 <,>,<=,>=,==,!=或<> <,>,<=,>=,==,!= 比较操作 is,is not instanceof 身份认证 | | 位或 & & 位与 ^ ^ 位异或

Kotlin操作符重载:把标准操作加入到任何类中(KAD 17)

作者:Antonio Leiva 时间:Mar 21, 2017 原文链接:https://antonioleiva.com/operator-overload-kotlin/ 就像其他每种语言一样,在Kotlin中,已经预定义了一些操作符执行一定的操作. 最典型的是加(+),减(-),乘(*),除(/),而且还有很多. 类似Java这样的一些语言,这些操作符被限制在一些特定的数量类型上,且没有方法让其他类型数据使用这些操作符. 还有在像Scala这样的其他语言中,由于函数名称可接受任何符号,我

c++ --&gt; 操作符重载

一.什么是操作符重载 操作符重载可以分为两部分:“操作符”和“重载”.说到重载想必都不陌生了吧,这是一种编译时多态,重载实际上可以分为函数重载和操作符重载.运算符重载和函数重载的不同之处在于操作符重载重载的一定是操作符.我们不妨先直观的看一下所谓的操作符重载: #include <iostream> using namespace std; int main() { int a = 2 , b = 3; float c = 2.1f , d = 1.2f; cout<<"

操作符重载

class Program { int count; public Program() { } public Program(int count) { this.count = count; } static void Main(string[] args) { Program p1 = new Program(16); Program p2 = new Program(16); /** 操作符调用 */ Console.WriteLine(p1 + p2); Console.WriteLine

第二十篇:类操作符重载的相关规定与具体实现示例

前言 有书这么说过,C++设计的最大目的在于允许程序员定义自己的类型,并使它们用起来跟内置类型一样容易和直观.就目前看来,要实现这一点,最核心的莫过于操作符的重载.科学的重载可以让类的使用最大程度地接近内置类型.本文将讨论类操作符重载涉及到的一些原则和具体做法. 实现类操作符重载的两种思路 1. 友元函数法: 将待重载操作符视作非成员函数( 它声明为操作数类型的友元函数 ) 应当采用这种机制重载的运算符有:IO操作符,算数操作符,关系操作符. 2. 成员函数法: 将待重载操作符视作特殊的成员函数

拷贝构造函数 和 赋值操作符重载

什么时候需要定义自己的拷贝构造函数: 当类中包含有,动态分配成员 或者 指针 的时候. 如果使用默认构造函数,则新构造出来的 新类 和 旧类 里面的指针成员 指向同一个空间, 而当其中一个类 清空掉那个空间 .另一个类的指针就会变成野指针(因为空间已经被清空) , 也就是说默认构造函数是复制值(地址也是值) ps.基本数据类型的数组可以直接使用默认复制构造函数.也就是说有涉及到 自行开辟额外空间 的数据类型 和 指针 的类就需要 什么时候调用拷贝构造函数: 1.一个对象以 值传递 的方式 传入

操作符重载方法

CLR规范要求重载操作符重载方法必须是public和static方法 C#要求操作符重载方法至少有一个参数的类型与当前定义的这个方法类型相同 为了减少运行时开销,编译器会直接针对基元类型执行运算,并直接生成操作这些类型的实例的中间代码(IL)指令,所以在Framework标准库中没有定义基元类型的操作符重载 代码示例 public sealed class Complexe { public static Complexe operator +(Complexe c1, Complexe c2)

Python运算符重载

运算符重载是指在方法(双下划线的特殊方法)中拦截内置的操作--当类的实例出现在内置操作中,Python会自动调用自定义的方法,并且返回自定义方法的操作结果. 可以让类拦截常规的Python运算. 可调用对象:__call__() 函数:内置函数.自定义函数.def.lambda 类 类方法 函数的属性: __doc__ __name__ __dict__ __code__ __globals__ 方法的属性: __doc__ __name__ __func__ __class__ __self_