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实现apahce网站日志分析示例
Apr 02 Python
Python实现删除文件但保留指定文件
Jun 21 Python
浅谈python 四种数值类型(int,long,float,complex)
Jun 08 Python
Python基于递归算法实现的走迷宫问题
Aug 04 Python
python3 发送任意文件邮件的实例
Jan 23 Python
用Python一键搭建Http服务器的方法
Jun 01 Python
python+pyqt5实现图片批量缩放工具
Mar 18 Python
python3安装crypto出错及解决方法
Jul 30 Python
利用Tensorflow的队列多线程读取数据方式
Feb 05 Python
Pycharm及python安装详细步骤及PyCharm配置整理(推荐)
Jul 31 Python
Python学习之迭代器详解
Apr 01 Python
使用python绘制横竖条形图
Apr 21 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中autoload的用法总结
2013/11/08 PHP
php检测文本的编码
2015/07/26 PHP
Yii2中简单的场景使用介绍
2017/06/02 PHP
jquery BS,dialog控件自适应大小
2009/07/06 Javascript
扩展javascript的Date方法实现代码(prototype)
2010/11/20 Javascript
jQuery获取Select选择的Text和Value(详细汇总)
2013/01/25 Javascript
Nodejs关于gzip/deflate压缩详解
2015/03/04 NodeJs
jQuery+html5实现div弹出层并遮罩背景
2015/04/15 Javascript
javascript实现动态表头及表列的展现方法
2015/07/14 Javascript
详解AngularJS Filter(过滤器)用法
2015/12/28 Javascript
移动端点击态处理的三种实现方式
2017/01/12 Javascript
微信小程序 设置启动页面的两种方法
2017/03/09 Javascript
ES6入门教程之Class和Module详解
2017/05/17 Javascript
详解 vue.js用法和特性
2017/10/15 Javascript
js全屏事件fullscreenchange 实现全屏、退出全屏操作
2019/09/17 Javascript
Vue3.0 响应式系统源码逐行分析讲解
2019/10/14 Javascript
浅谈Webpack4 Tree Shaking 终极优化指南
2019/11/18 Javascript
使用webpack/gulp构建TypeScript项目的方法示例
2019/12/18 Javascript
JavaScript代码异常监控实现过程详解
2020/02/17 Javascript
解决antd的Form组件setFieldsValue的警告问题
2020/10/29 Javascript
[02:48]DOTA2英雄基础教程 拉席克
2013/12/12 DOTA
[53:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第三场 6.2
2018/06/03 DOTA
python复制文件代码实现
2013/12/23 Python
python实现apahce网站日志分析示例
2014/04/02 Python
利用python实现数据分析
2017/01/11 Python
Python爬虫抓取代理IP并检验可用性的实例
2018/05/07 Python
python创建文件备份的脚本
2018/09/11 Python
如何利用Anaconda配置简单的Python环境
2019/06/24 Python
python实现最小二乘法线性拟合
2019/07/19 Python
用Python将Excel数据导入到SQL Server的例子
2019/08/24 Python
初次部署django+gunicorn+nginx的方法步骤
2019/09/11 Python
配置管理计划的主要内容有哪些
2014/06/20 面试题
心理学专业求职信
2014/06/16 职场文书
一份恶作剧的检讨书
2014/09/13 职场文书
2015教师个人工作总结范文
2015/03/31 职场文书
成本低的5个创业项目:投资小、赚钱快
2019/08/20 职场文书