《Python程式設計從入門到實踐》第9章 類
阿新 • • 發佈:2018-12-20
第9章 類
只記錄了自己以前沒有注意到的知識點
1.方法__init__()
這是一個特殊的方法,當你建立例項的時候,Python會自動執行它。在這個方法的名稱中,開頭和末尾各有兩個下劃線,這是一種約定,旨在避免Python預設方法與普通方法發生名稱衝突 在這個方法中 self 是必不可少的,還必須位於其他形參的前面。每個與類相關聯的方法呼叫都會自動傳遞實參 self ,它是一個指向例項本身的引用,讓例項能夠訪問類中的方法和屬性。
2.修改屬性的值
- 直接修改屬性的值:通過例項直接訪問該屬性,進行修改(使用句點表示法)
- 通過方法修改屬性的值:在類中建立更改屬性的方法,建立例項呼叫方法,將值傳入
- 通過方法對屬性的值進行遞增(遞減):在類中建立方法,建立例項後呼叫該方法,然後將需要的值傳入
3.繼承
一個類繼承另一個類時,它將自動獲得另一個類的所有屬性和方法;原有的類稱為父類,而新的類稱為子類。
字類繼承了其父類的所有屬性和方法,同時還可以定義自己的屬性和方法
1.首先要初始化父類的屬性
class Car():
"""一次模擬汽車的簡單嘗試"""
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
class ElectricCar(Car):
"""電動汽車的獨特之處"""
def __init__(self, make, model, year):
""" 初始化父類的屬性,再初始化電動汽車特有的屬性"""
super().__init__(make, model, year)#呼叫super將父類和字類聯絡起來
2.給子類定義屬性和方法
3.重寫父類的方法:
對於父類的方法,只要它不符合子類的要求,都可以對其進行重寫。定義方法的時候要與重寫的方法名相同,這樣,python就不會考慮父類的方法,而只關注你在子類中定義的相應的方法。
4.將例項用作屬性
使用程式碼模擬實物時,你可能會發現自己給類新增的細節越來越多:屬性和方法清單以及檔案都越來越長。在這種情況下,可能需要將類的一部分作為一個獨立的類提取出來。 你可以將大型類拆分成多個協同工作的小類
class Car():
--snip--
class Battery():
"""一次模擬電動汽車電瓶的簡單嘗試"""
def __init__(self, battery_size=70):
"""初始化電瓶的屬性"""
self.battery_size = battery_size
def describe_battery(self):
"""列印一條描述電瓶容量的訊息"""
print("This car has a " + str(self.battery_size) + "-kWh battery.")
class ElectricCar(Car):
"""電動汽車的獨特之處"""
def __init__(self, make, model, year):
""" 初始化父類的屬性,再初始化電動汽車特有的屬性"""
super().__init__(make, model, year)
self.battery = Battery()#!!!!!將Battery例項作為ElectricCar類的屬性
#在每個ElectricCar 例項都包含一個自動建立的Battery 例項
car=ElectricCar('tesla', 'model s', 2016)
car.battery.describe_battery()
#輸出
This car has a 70-kWh battery.
4.OrderedDict類
OrderedDict 是模組 collections 中的一個類 。
OrderedDict 例項行為幾乎與字典相同,區別在於鍵值對的新增順序
from collections import OrderedDict # 匯入 OrderedDict 類
favorite_languages = OrderedDict() # 建立例項
favorite_languages['jen'] = 'python'
favorite_languages['sarah'] = 'c'
favorite_languages['edward'] = 'ruby'
favorite_languages['phil'] = 'python'
for name, language in favorite_languages.items():
print(name.title() + "'s favorite language is " + language.title() + ".")
#輸出
Jen's favorite language is Python.
Sarah's favorite language is C.
Edward's favorite language is Ruby.
Phil's favorite language is Python.
5.類編碼風格
- 將類名中的每個單詞的首字母都大寫,而不使用下劃線
- 例項名和模組名都採用小寫的格式,並在單詞之間新增下劃線
- 對於每個類,都應緊跟在類定義後面包含一個文件字串。這種文件字串簡要地描述類的功能,並遵循編寫函式的文件字串時採用的格式約定。每個模組也都應包含一個文件字串,對其中的類可用於做什麼進行描述。
- 在類中以一個空行來分割方法;在模組中,使用兩個空格來分割類
- 需要同時匯入標準庫中的模組和你編寫的模組時,先編寫匯入標準庫模組的import 語句,再新增一個空行,然後編寫匯入你自己編寫的模組的import 語句。在包含多 條import 語句的程式中,這種做法讓人更容易明白程式使用的各個模組都來自何方。