`

[转] 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],
                            For If
__len__        长度            len(X)
__cmp__        比较            X==Y,X<Y
__lt__        小于            X<Y
__eq__        等于            X=Y
__radd__        Right-Side +        +X
__iadd__        +=                X+=Y
__iter__        迭代            For In
 
7.1    减法重载

Python代码

  1. class Number:   
  2.     def __init__(self, start):   
  3.         self.data = start   
  4.     def __sub__(self, other): #minus method   
  5.         return Number(self.data - other)   
  6.   
  7. number = Number(20)   
  8. 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



7.2    迭代重载

Python代码

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

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


7.3    索引重载

Python代码

  1. class stepper:   
  2.     def __getitem__(self, i):   
  3.         return self.data[i]   
  4.       
  5. X = stepper()   
  6. X.data = 'Spam'  
  7. X[1] #call __getitem__   
  8.   
  9. for item in X: #call __getitem__   
  10.     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

 

7.4    getAttr/setAttr重载

Python代码

  1. class empty:   
  2.     def __getattr__(self,attrname):   
  3.         if attrname == 'age':   
  4.             return 40  
  5.         else:   
  6.             raise AttributeError,attrname   
  7. X = empty()   
  8. print X.age #call__getattr__   
  9.   
  10. class accesscontrol:   
  11.     def __setattr__(self, attr, value):   
  12.         if attr == 'age':   
  13.             # Self.attrname = value loops!   
  14.             self.__dict__[attr] = value   
  15.         else:   
  16.             print attr   
  17.             raise AttributeError, attr + 'not allowed'  
  18.   
  19. X = accesscontrol()   
  20. X.age = 40      #call __setattr__   
  21. X.name = 'wang' #raise exception  

class empty: def __getattr__(self,attrname): if attrname == 'age': return 40 else: raise AttributeError,attrnameX = 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


7.5    打印重载

Python代码

  1. class adder:   
  2.     def __init__(self, value=0):   
  3.         self.data = value   
  4.     def __add__(self, other):   
  5.         self.data += other   
  6.   
  7. class addrepr(adder):   
  8.     def __repr__(self):   
  9.         return 'addrepr(%s)' % self.data   
  10.       
  11. x = addrepr(2)  #run __init__   
  12. x + 1       #run __add__   
  13. print x     #run __repr__  

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


7.6    Call调用函数重载

Python代码

  1. class Prod:   
  2.     def __init__(self, value):   
  3.         self.value = value   
  4.     def __call__(self, other):   
  5.         return self.value * other   
  6.   
  7. p = Prod(2) #call __init__   
  8. print p(1) #call __call__   
  9. print p(2)  

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



7.7    析构函数重载

Python代码

  1. class Life:   
  2.     def __init__(self, name='name'):   
  3.         print 'Hello', name   
  4.         self.name = name   
  5.     def __del__(self):   
  6.         print 'Goodby', self.name   
  7.   
  8. brain = Life('Brain') #call __init__   
  9. brain = 'loretta'    # call __del__  
分享到:
评论

相关推荐

    运算符重载.py python运算符重载

    运算符重载.py python运算符重载

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

    本文实例讲述了Python运算符重载用法。分享给大家供大家参考。具体如下: 在Python语言中提供了类似于C++的运算符重在功能: 一下为Python运算符重在调用的方法如下: Method Overloads Call for __init__ 构造...

    python 运算符重载 - 自定义分数类 示例

    python 运算符重载 - 自定义分数类 示例

    一篇文章带你了解Python运算符重载.docx

    Python中的运算符重载是一种强大的特性,允许程序员自定义运算符的行为,以便它们在特定类的对象上具有不同的意义。这使得代码更加直观和易于理解,尤其是处理自定义数据结构时。下面我们将深入探讨这个概念。 一、...

    Python运算符重载用法实例

    本文实例讲述了Python运算符重载用法。分享给大家供大家参考。具体分析如下: python中,我们在定义类的时候,可以通过实现一些函数来实现重载运算符。 例子如下: # -*- coding:utf-8 -*- ''''' Created on 2013-3...

    python运算符重载.html

    什么是运载符重载?__add__,getitem:索引、分片,setitem:索引赋值,delitem:索引和分片删除,以及如何使用这些方法

    python 运算符重载

    运算符重载 以Rational class 为例,重载运算符 a/b a//b a += b a == b a a &gt; b a != b a a &gt;= b

    Python正确重载运算符的方法示例详解

    运算符重载是Python编程中的一个重要概念,它允许我们自定义类的行为,使得类的实例能够像内置类型那样使用运算符。本文将详细介绍如何在Python中正确地重载运算符,并通过具体的示例代码来帮助理解这一特性。 ####...

    python-运算符重载.rar

    Python中的运算符重载是面向对象编程的一个重要特性,它允许程序员为自定义的数据类型赋予特定的运算符行为。在Python中,当我们定义一个类并创建了类的对象时,我们可能会希望这些对象能够像内置类型(如整数、...

    python 运算符 供重载参考

    二元运算符 特殊方法 + __add__,__radd__ – __sub__,__rsub__ * __mul__,__rmul__ / __div__,__rdiv__,__truediv__,__rtruediv__ // __floordiv__,__rfloordiv__ % __mod__,__rmod__ ** __...

    python 对象之间的依赖关系和运算符重载 示例

    python 对象之间的依赖关系和运算符重载 示例

    复数类(包括运算符重载)

    运算符重载是C++等支持的对象导向特性,允许我们为已有的运算符赋予新的含义,使其能作用于自定义类型(如复数类)。对于复数类,常见的运算符重载包括加法、减法、乘法和除法。下面是一些示例: #### 加法 ```cpp ...

    Python 110.特殊方法和运算符重载.mp4

    Python 110.特殊方法和运算符重载.mp4

    相关资源图1运算符重载

    相关资源图1运算符重载

    python重载比较运算符.docx

    总之,Python的运算符重载提供了一种强大的机制,使得我们能够自定义类的比较逻辑,使得自定义对象间的比较变得灵活且具有语义意义。这不仅增加了代码的表达力,也使得复杂的数据结构在比较时更加直观和方便。

Global site tag (gtag.js) - Google Analytics