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 相关文章推荐
详解Python3中字符串中的数字提取方法
Jan 14 Python
python 利用栈和队列模拟递归的过程
May 29 Python
python实现zabbix发送短信脚本
Sep 17 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
Jun 17 Python
python实现PID算法及测试的例子
Aug 08 Python
python中matplotlib条件背景颜色的实现
Sep 02 Python
python实现的分析并统计nginx日志数据功能示例
Dec 21 Python
pytorch实现从本地加载 .pth 格式模型
Feb 14 Python
详解Python 实现 ZeroMQ 的三种基本工作模式
Mar 24 Python
keras的load_model实现加载含有参数的自定义模型
Jun 22 Python
python必学知识之文件操作(建议收藏)
May 30 Python
Python max函数中key的用法及原理解析
Jun 26 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
在Windows中安装Apache2和PHP4的权威指南
2006/10/09 PHP
简单的页面缓冲技术
2006/10/09 PHP
PHP错误Allowed memory size of 67108864 bytes exhausted的3种解决办法
2014/07/28 PHP
php合并数组中相同元素的方法
2014/11/13 PHP
PHP往XML中添加节点的方法
2015/03/12 PHP
PHP异常处理Exception类
2015/12/11 PHP
Yii实现显示静态页的方法
2016/04/25 PHP
php获取当前月与上个月月初及月末时间戳的方法
2016/12/05 PHP
laravel如何开启跨域功能示例详解
2017/08/31 PHP
把html页面的部分内容保存成新的html文件的jquery代码
2009/11/12 Javascript
js跟随滚动条滚动浮动代码
2009/12/31 Javascript
VUE 更好的 ajax 上传处理 axios.js实现代码
2017/05/10 Javascript
使用JS实现图片轮播的实例(前后首尾相接)
2017/09/21 Javascript
JS使用正则表达式判断输入框失去焦点事件
2019/10/16 Javascript
Angular8 简单表单验证的实现示例
2020/06/03 Javascript
何时/使用 Vue3 render 函数的教程详解
2020/07/25 Javascript
Javascript var变量删除原理及实现
2020/08/26 Javascript
深入解析Python中的变量和赋值运算符
2015/10/12 Python
Python注释详解
2016/06/01 Python
Python入门_学会创建并调用函数的方法
2017/05/16 Python
从django的中间件直接返回请求的方法
2018/05/30 Python
opencv3/C++实现视频背景去除建模(BSM)
2019/12/11 Python
Python 序列化和反序列化库 MarshMallow 的用法实例代码
2020/02/25 Python
python使用PIL剪切和拼接图片
2020/03/23 Python
浅析python中的del用法
2020/09/02 Python
台湾菁英交友:结识黄金单身的台湾人
2018/01/22 全球购物
泰国办公用品购物网站:OfficeMate
2018/02/04 全球购物
万豪国际住宅与别墅集团:Homes & Villas by Marriott International
2020/10/08 全球购物
shell程序中如何注释
2012/01/28 面试题
光盘行动倡议书
2014/02/02 职场文书
2014年统战工作总结
2014/12/09 职场文书
2015年父亲节活动总结
2015/02/12 职场文书
2019XX公司员工考核管理制度!
2019/08/07 职场文书
导游词之神仙居景区
2019/11/15 职场文书
Python爬虫实战之爬取携程评论
2021/06/02 Python
mysql分表之后如何平滑上线详解
2021/11/01 MySQL