Python使用class創建對象。沒個定義的類都有一個特殊的方法,名為__init__(),可以通過這個方法控制如何初始化對象。
定義類的基本形式:
class Athlete: def __init__(self): #The code to initialize a "Athlete" object. ......
創建對象實例:有了類之后,創建對象實例很容易。只需將對類名的調用賦至各個變量。通過
這種方式,類(以及__init__()方法)提供了一種機制,允許你創建一個定制的工廠函數,
用來根據需要創建多個對象實例。與C++系列語言不同,Python中沒有定義構造函數“new”
的概念。Python會為你完成對象構建,然后可以使用__init__()方法定制對象的初始狀態。
self的重要性
定義一個類時,實際上是在定義一個定制工廠函數,然后可以在你的代碼中使用這個工廠函數
創建實例,即:
a = Athlete() Athlete().__init__(a) ____________________________________________________ Athlete為類名,__init__為方法名,a為對象實例的目標標識符。
在類中定義__init__()方法:
def __init__(self): # The code to initialize an "Athlete" object. ......
每個方法的第一個參數都是self
實際上,不僅__init__()方法需要self作為它的第一個參數,類中定義的所有其他方法也是如此。
Python要求每個方法的第一個參數為調用對象實例。下面擴展這個實例類,在一個名為thing的對象
屬性中存儲一個值,具體值在初始化時設置。另外還要擴充一個方法,名為how_big(),它會利用len()
BIF返回thing的長度:
class Athlete: def __init__(self, value=0): self.thing = value def how_big(self): return(len(self.thing)) --------------------------------------------------------------- 現在“初始化”代碼將所提供的一個值賦至一個名為“self.thing”的 類屬性。 how_big() 方法返回“self.thing”的長度。
在一個對象實例上調用類方法時,Python要求第一個參數是調用對象實例,這往往賦至各個方法的self參數。
只憑這一點就足以解釋為什么self如此重要,也可以由此說明編寫對象方法時為什么所有對象方法的第一個參
數必須是self。
繼承Python內置的list
Python的class允許你從零開始創建一個定制類,就像創建Athlete類那樣。不過,class還允許通過繼承現有的
其他類來創建一個類,這也包括list,set和dict提供的Python內置數據結構類。通過繼承創建的這些類稱為子類。
class NameList(list): def __init__(self, a_name): list.__init__([]) self.name = a_name 定義了NameList類之后,用它創建一個對象實例,檢查對象類型(使用type()BIF),看看它會提供什么內容(使用dir()BIF): johnny = NameList("John Paul Jones") >>> type(johnny) <class '__main__.NameList'> >>> dir(johnny) ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__module__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'name', 'pop', 'remove', 'reverse', 'sort'] 使用list類提供的一些功能來補充Johnny中儲存的數據: >>> johnny.append("Bass Player") >>> johnny.extend(["Composer", "Arranger", "Musician"]) >>> johnny ['Bass Player', 'Composer', 'Arranger', 'Musician'] johnny.name 'John Paul Jones' >>> vera.name 'Vera vi' 由於Johnny是一個列表,所以完全可以對它做列表處理: >>> for attr in johnny: print(johnny.name + " is a " + attr + ".") John Paul Jones is a Bass Player. John Paul Jones is a Composer. John Paul Jones is a Arranger. John Paul Jones is a Musician.
