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中列表和元祖的使用方法
Apr 25 Python
Python的“二维”字典 (two-dimension dictionary)定义与实现方法
Apr 27 Python
Python实现的用户登录系统功能示例
Feb 05 Python
用Python实现数据的透视表的方法
Nov 16 Python
Django 模型类(models.py)的定义详解
Jul 19 Python
Django admin禁用编辑链接和添加删除操作详解
Nov 15 Python
python实现高斯(Gauss)迭代法的例子
Nov 20 Python
Python socket服务常用操作代码实例
Jun 22 Python
Python监听键盘和鼠标事件的示例代码
Nov 18 Python
Django项目如何获得SSL证书与配置HTTPS
Apr 30 Python
分享3个非常实用的 Python 模块
Mar 03 Python
Python Numpy库的超详细教程
Apr 06 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 和 MySQL 基础教程(一)
2006/10/09 PHP
php 缓存函数代码
2008/08/27 PHP
php数组函数序列之array_pop() - 删除数组中的最后一个元素
2011/11/07 PHP
弹出模态框modal的实现方法及实例
2017/09/19 PHP
php进程daemon化的正确实现方法
2018/09/06 PHP
用Javscript实现表单复选框的全选功能
2007/05/25 Javascript
突发奇想的一个jquery插件
2010/11/19 Javascript
Javascript面向对象之四 继承
2011/02/08 Javascript
全系IE支持Bootstrap的解决方法
2015/10/19 Javascript
快速掌握Node.js环境的安装与运行方法
2016/02/16 Javascript
Javascript打印局部页面实例
2016/06/21 Javascript
Javascript获取随机数的实现方法
2016/06/22 Javascript
NodeJs的优势和适合开发的程序
2016/08/14 NodeJs
bootstrap快速制作后台界面
2016/12/05 Javascript
JS检测是否可以访问公网服务器功能代码
2017/06/19 Javascript
关于JavaScript中forEach和each用法浅析
2017/07/27 Javascript
利用express启动一个server服务的方法
2017/09/17 Javascript
javascript中的隐式调用
2018/02/10 Javascript
解决webpack+Vue引入iView找不到字体文件的问题
2018/09/28 Javascript
JavaScript内置对象math,global功能与用法实例分析
2019/06/10 Javascript
NProgress显示顶部进度条效果及使用详解
2019/09/21 Javascript
[00:20]DOTA2荣耀之路7:-ah fu-抢盾
2018/05/31 DOTA
python写入xml文件的方法
2015/05/08 Python
Python求正态分布曲线下面积实例
2019/11/20 Python
解决Python spyder显示不全df列和行的问题
2020/04/20 Python
美的官方商城:Midea
2016/09/14 全球购物
应届大学生求职的自我评价
2013/11/17 职场文书
家长给孩子的表扬信
2014/01/17 职场文书
2014年小学生教师节演讲稿范文
2014/09/10 职场文书
解除劳动合同协议书范本
2014/09/13 职场文书
大学生考试作弊检讨书
2014/09/21 职场文书
离职报告范文
2014/11/04 职场文书
纪委立案决定书
2015/06/24 职场文书
mysql在项目中怎么选事务隔离级别
2021/05/25 MySQL
电脑只能进入安全模式无法正常启动的解决办法
2022/04/08 数码科技
win10系统xps文件怎么打开?win10打开xps文件的两种操作方法
2022/07/23 数码科技