Python3 面向對象程序設計(類)


 

一、自定義類

1、屬性與方法

格式:

class classname:
    def __init__(self,a,b):
      self.a=a
      self.b=b
    def ...

>一般都有一個__init__函數來定義屬於這個類的參數,前后都被"__"包圍的函數為特殊方法

;以"__"開頭的變量只能讀,不能寫,相當於private數據。

>如果重新實現str,repr等方法,值應使用表象形式:

def __str__(self):
       return "({0.a!r},{0.b!r})".format(self)

>如果調用一個類的方法,python就會自動在類樹中進行回溯,如果一直找不到就會產生一個AttributeError.

>在方法前加super()表示調用基類的方法,總是調用super().__init__()是一個種合理的做法。

>自定義類的所有實例都支持==,這種比較總是返回False,通過對特殊方法__eq__()進行重新實現,__ne__()也會跟着自動實現。

>如果我們希望避免不適當的比較,可以使用斷言(如:assert isinstance(other,Point));也可以用產生TypeError異常來聲明不支持這兩個對象的比較操作(如:if not isinstance(other,Point):raise TypeError());方法三:if not isinstance(other,Point):return NotImplem-emted,但只有在類只對比較特殊方法進行了重新實現才可能返回NotImplemented。

>isinstance()為內置的函數,以一個對象與一個類(或類構成的元組)為參數,如果對象屬於給定的類,或基類,就返回True。

>object提供的比較的特殊方法:__lt__(),__le__(),__eq__(),__ne__(),__ge__(),__gt__()。

2、繼承與多態

class classname2(classname):
  def __init__(self)
  ...

classname2是classname的繼承類。

多態:給定類的任意對象在使用時都可以看作該類的任意某個基類的對象。

3、使用特性進行屬性的存取控制

修飾器(decorator):是一個函數,該函數以一個函數或方法為參數,並返回參數“修飾后”版本。使用修飾器以@符號引導來進行標記。

例(用內置的property()函數對a的屬性進行修飾,使a必須為大於0的數):

@property
def a(self):
    return self.__a
@a.setter
def a(self,a):
    assert a>0,"a must be nonzero and non-negative"
    self.__a=a

每個創建的特性都包含getter,setter,deleter等屬性。

4、創建完全整合的數據類型

對於不想要的來自於基類的方法,可以用raise Error的來取消這些方法的使用。對於要同時取消多個類的情況,可以借助內置的exec()函數來實現,它會動態地執行從給定對象傳遞來的代碼。

 

二、自定義組合類

組合類型的特殊方法:

__contains__(self,x)     x in y
__delitem__(self,k)      del y[k]
__getitem__(self,k)      y[k]
__iter__(self)          for x in y :pass 返回序列中y中的項或映射y中鍵的迭代子
__len__(self)          len(y)
__reversed__(self)      reversed(y)
__setitem__(self,k,v)    y[k]=v

對於賦值=后邊的值也可以用or,如果第一個值為False,則使用or后邊的值(a= b or 3)。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM