欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python運算符重載用法實例分析

 更新時間:2015年06月01日 16:00:05   作者:adupt  
這篇文章主要介紹了Python運算符重載用法,實例分析了幾種常見的Python運算符重載的使用技巧,需要的朋友可以參考下

本文實例講述了Python運算符重載用法。分享給大家供大家參考。具體如下:

在Python語言中提供了類似于C++的運算符重在功能:

一下為Python運算符重在調(diào)用的方法如下:

Method         Overloads         Call for
__init__        構(gòu)造函數(shù)         X=Class()
__del__         析構(gòu)函數(shù)         對象銷毀
__add__         +                 X+Y,X+=Y
__or__         |                 X|Y,X|=Y
__repr__        打印轉(zhuǎn)換         print X,repr(X)
__str__         打印轉(zhuǎn)換         print X,str(X)
__call__        調(diào)用函數(shù)         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調(diào)用函數(shù)重載

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. 析構(gòu)函數(shù)重載

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程序設(shè)計有所幫助。

相關(guān)文章

  • python的import?機(jī)制是怎么實現(xiàn)的

    python的import?機(jī)制是怎么實現(xiàn)的

    這篇文章主要介紹了python的import?機(jī)制是怎么實現(xiàn)的,import有Python運行時的全局模塊池的維護(hù)和搜索、解析與搜索模塊路徑的樹狀結(jié)構(gòu)等作用,下文具體相關(guān)介紹需要的小伙伴可以參考一下
    2022-05-05
  • 超級實用的8個Python列表技巧

    超級實用的8個Python列表技巧

    這篇文章主要介紹了實用的8個Python列表技巧,幫助大家更好的理解和學(xué)習(xí)python列表的知識,感興趣的朋友可以了解下
    2020-08-08
  • pytorch中backward()方法如何自動求梯度

    pytorch中backward()方法如何自動求梯度

    這篇文章主要介紹了pytorch中backward()方法如何自動求梯度問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • flask + pymysql操作Mysql數(shù)據(jù)庫的實例

    flask + pymysql操作Mysql數(shù)據(jù)庫的實例

    下面小編就為大家?guī)硪黄猣lask + pymysql操作Mysql數(shù)據(jù)庫的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • Python中的?pass?占位語句

    Python中的?pass?占位語句

    這篇文章主要介紹了Python中的?pass?占位語句,Python?pass是空語句,是為了保持程序結(jié)構(gòu)的完整性,下文具體的相關(guān)內(nèi)容介紹需要的小伙伴可以參考一下
    2022-04-04
  • 解決PyCharm中光標(biāo)變粗的問題

    解決PyCharm中光標(biāo)變粗的問題

    下面小編就為大家?guī)硪黄鉀QPyCharm中光標(biāo)變粗的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • python計算無向圖節(jié)點度的實例代碼

    python計算無向圖節(jié)點度的實例代碼

    今天小編就為大家分享一篇python計算無向圖節(jié)點度的實例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Python Flask 請求數(shù)據(jù)獲取響應(yīng)詳解

    Python Flask 請求數(shù)據(jù)獲取響應(yīng)詳解

    這篇文章主要介紹了Python Flask請求數(shù)據(jù)獲取響應(yīng)的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-10-10
  • 批處理與python代碼混合編程的方法

    批處理與python代碼混合編程的方法

    這篇文章主要介紹了批處理與python代碼混合編程的方法的相關(guān)資料,非常不錯,具有參考價值,感興趣的朋友一起學(xué)習(xí)吧
    2016-05-05
  • Python中的self用法詳解

    Python中的self用法詳解

    在本篇文章里小編給大家整理的是關(guān)于Python中的self用法以及實例內(nèi)容,需要的朋友們參考下。
    2019-08-08

最新評論