Python运算符重载用法实例分析


Posted in Python onJune 01, 2015

本文实例讲述了Python运算符重载用法。分享给大家供大家参考。具体如下:

在Python语言中提供了类似于C++的运算符重在功能:

一下为Python运算符重在调用的方法如下:

Method         Overloads         Call for
__init__        构造函数         X=Class()
__del__         析构函数         对象销毁
__add__         +                 X+Y,X+=Y
__or__         |                 X|Y,X|=Y
__repr__        打印转换         print X,repr(X)
__str__         打印转换         print X,str(X)
__call__        调用函数         X()
__getattr_    限制             X.undefine
__setattr__     取值             X.any=value
__getitem__     索引             X[key],
__len__         长度             len(X)
__cmp__         比较             X==Y,X<Y
__lt__         小于             X<Y
__eq__         等于             X=Y
__radd__        Right-Side +         +X
__iadd__        +=                 X+=Y
__iter__        迭代             For In

1. 减法重载

class Number:  
  def __init__(self, start):  
    self.data = start  
  def __sub__(self, other): #minus method  
    return Number(self.data - other)  
number = Number(20)  
y = number ? 10 # invoke __sub__ method 
class Number: 
  def __init__(self, start): 
    self.data = start 
  def __sub__(self, other): #minus method 
    return Number(self.data - other) 
number = Number(20) 
y = number ? 10 # invoke __sub__ method

2. 迭代重载

class indexer:  
  def __getitem__(self, index): #iter override  
    return index ** 2 
X = indexer()  
X[2]  
for i in range(5):  
  print X[i] 
class indexer: 
  def __getitem__(self, index): #iter override 
    return index ** 2 
X = indexer() 
X[2] 
for i in range(5): 
  print X[i]

3. 索引重载

class stepper:  
  def __getitem__(self, i):  
    return self.data[i]  
X = stepper()  
X.data = 'Spam' 
X[1] #call __getitem__  
for item in X: #call __getitem__  
  print item 
class stepper: 
  def __getitem__(self, i): 
    return self.data[i] 
X = stepper() 
X.data = 'Spam' 
X[1] #call __getitem__ 
for item in X: #call __getitem__ 
   print item

4. getAttr/setAttr重载

class empty:  
  def __getattr__(self,attrname):  
    if attrname == 'age':  
      return 40 
    else:  
      raise AttributeError,attrname  
X = empty()  
print X.age #call__getattr__  
class accesscontrol:  
  def __setattr__(self, attr, value):  
    if attr == 'age':  
      # Self.attrname = value loops!  
      self.__dict__[attr] = value  
    else:  
      print attr  
      raise AttributeError, attr + 'not allowed' 
X = accesscontrol()  
X.age = 40   #call __setattr__  
X.name = 'wang' #raise exception 
class empty: 
  def __getattr__(self,attrname): 
    if attrname == 'age': 
      return 40 
    else: 
      raise AttributeError,attrname 
X = empty() 
print X.age #call__getattr__ 
class accesscontrol: 
  def __setattr__(self, attr, value): 
    if attr == 'age': 
      # Self.attrname = value loops! 
      self.__dict__[attr] = value 
    else: 
      print attr 
      raise AttributeError, attr + 'not allowed' 
X = accesscontrol() 
X.age = 40   #call __setattr__ 
X.name = 'wang' #raise exception

5. 打印重载

class adder:  
  def __init__(self, value=0):  
    self.data = value  
  def __add__(self, other):  
    self.data += other  
class addrepr(adder):  
  def __repr__(self):  
    return 'addrepr(%s)' % self.data  
x = addrepr(2) #run __init__  
x + 1    #run __add__  
print x   #run __repr__ 
class adder: 
  def __init__(self, value=0): 
    self.data = value 
  def __add__(self, other): 
    self.data += other 
class addrepr(adder): 
  def __repr__(self): 
    return 'addrepr(%s)' % self.data 
x = addrepr(2) #run __init__ 
x + 1    #run __add__ 
print x   #run __repr__

6. Call调用函数重载

class Prod:  
  def __init__(self, value):  
    self.value = value  
  def __call__(self, other):  
    return self.value * other  
p = Prod(2) #call __init__  
print p(1) #call __call__  
print p(2) 
class Prod: 
  def __init__(self, value): 
    self.value = value 
  def __call__(self, other): 
    return self.value * other 
p = Prod(2) #call __init__ 
print p(1) #call __call__ 
print p(2)

7. 析构函数重载

class Life:  
  def __init__(self, name='name'):  
    print 'Hello', name  
    self.name = name  
  def __del__(self):  
    print 'Goodby', self.name  
brain = Life('Brain') #call __init__  
brain = 'loretta'  # call __del__

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
在Python中用get()方法获取字典键值的教程
May 21 Python
详解Python编程中包的概念与管理
Oct 16 Python
python 实现将字典dict、列表list中的中文正常显示方法
Jul 06 Python
python实现对任意大小图片均匀切割的示例
Dec 05 Python
Python中时间datetime的处理与转换用法总结
Feb 18 Python
pybind11和numpy进行交互的方法
Jul 04 Python
flask框架自定义url转换器操作详解
Jan 25 Python
深度学习入门之Pytorch 数据增强的实现
Feb 26 Python
关于matplotlib-legend 位置属性 loc 使用说明
May 16 Python
如何用python写个模板引擎
Jan 14 Python
解决Pyinstaller打包软件失败的一个坑
Mar 04 Python
Python djanjo之csrf防跨站攻击实验过程
May 14 Python
python使用Image处理图片常用技巧分析
Jun 01 #Python
python实现图片变亮或者变暗的方法
Jun 01 #Python
wxPython中listbox用法实例详解
Jun 01 #Python
在Python的Django框架下使用django-tagging的教程
May 30 #Python
使用url_helper简化Python中Django框架的url配置教程
May 30 #Python
在Python的Django框架中simple-todo工具的简单使用
May 30 #Python
Python中Django框架下的staticfiles使用简介
May 30 #Python
You might like
探讨PHP JSON中文乱码的解决方法详解
2013/06/06 PHP
Zend Framework教程之模型Model基本规则和使用方法
2016/03/04 PHP
PHP实现与java 通信的插件使用教程
2019/08/11 PHP
Nigma vs Alliance BO5 第四场2.14
2021/03/10 DOTA
Jquery 自定义动画概述及示例
2013/03/29 Javascript
jquery中邮箱地址 URL网站地址正则验证实例代码
2013/09/15 Javascript
JavaScript中创建对象和继承示例解读
2014/02/12 Javascript
JQuery实现当鼠标停留在某区域3秒后自动执行
2014/09/09 Javascript
jquery和js实现对div的隐藏和显示方法
2014/09/26 Javascript
jquery+php实现滚动的数字特效
2015/11/29 Javascript
javascript中eval解析JSON字符串
2016/02/27 Javascript
使用jQuery实现WordPress中的Ctrl+Enter和@评论回复
2016/05/21 Javascript
JavaScript 数组的进化与性能分析
2017/09/18 Javascript
vue-cli配置环境变量的方法
2018/07/09 Javascript
Vuepress 搭建带评论功能的静态博客的实现
2019/02/17 Javascript
微信小程序实现电子签名功能
2020/07/29 Javascript
在vue中使用vant TreeSelect分类选择组件操作
2020/11/02 Javascript
基于DATAFRAME中元素的读取与修改方法
2018/06/08 Python
Python用5行代码写一个自定义简单二维码
2018/10/21 Python
python 读取dicom文件,生成info.txt和raw文件的方法
2019/01/24 Python
Python中如何导入类示例详解
2019/04/17 Python
jupyter实现重新加载模块
2020/04/16 Python
jupyter notebook中新建cell的方法与快捷键操作
2020/04/22 Python
opencv 图像滤波(均值,方框,高斯,中值)
2020/07/08 Python
CSS 说明横向进度条最后显示文字的实现代码
2020/11/10 HTML / CSS
HTML5中视频音频的使用详解
2017/07/07 HTML / CSS
MUGLER官方网站:蒂埃里·穆勒香水
2019/11/26 全球购物
俄罗斯电动工具和设备购物网站:Vseinstrumenti.ru
2020/11/12 全球购物
有个性的自我评价范文
2013/11/15 职场文书
大学生军训感想
2014/02/16 职场文书
课前三分钟演讲稿
2014/04/24 职场文书
影视广告专业求职信
2014/09/02 职场文书
2015教师年度思想工作总结
2015/04/30 职场文书
摩登时代观后感
2015/06/03 职场文书
浅谈Python从全局与局部变量到装饰器的相关知识
2021/06/21 Python
Mysql外键约束的创建与删除的使用
2022/03/03 MySQL