1. 程式人生 > >《Python程式設計從入門到實踐》第9章 類

《Python程式設計從入門到實踐》第9章 類

第9章 類

只記錄了自己以前沒有注意到的知識點

1.方法__init__()

​ 這是一個特殊的方法,當你建立例項的時候,Python會自動執行它。在這個方法的名稱中,開頭和末尾各有兩個下劃線,這是一種約定,旨在避免Python預設方法與普通方法發生名稱衝突 ​ 在這個方法中 self 是必不可少的,還必須位於其他形參的前面。每個與類相關聯的方法呼叫都會自動傳遞實參 self ,它是一個指向例項本身的引用,讓例項能夠訪問類中的方法和屬性。

2.修改屬性的值

  1. 直接修改屬性的值:通過例項直接訪問該屬性,進行修改(使用句點表示法)
  2. 通過方法修改屬性的值:在類中建立更改屬性的方法,建立例項呼叫方法,將值傳入
  3. 通過方法對屬性的值進行遞增(遞減):在類中建立方法,建立例項後呼叫該方法,然後將需要的值傳入

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.類編碼風格

  1. 將類名中的每個單詞的首字母都大寫,而不使用下劃線
  2. 例項名和模組名都採用小寫的格式,並在單詞之間新增下劃線
  3. 對於每個類,都應緊跟在類定義後面包含一個文件字串。這種文件字串簡要地描述類的功能,並遵循編寫函式的文件字串時採用的格式約定。每個模組也都應包含一個文件字串,對其中的類可用於做什麼進行描述。
  4. 在類中以一個空行來分割方法;在模組中,使用兩個空格來分割類
  5. 需要同時匯入標準庫中的模組和你編寫的模組時,先編寫匯入標準庫模組的import 語句,再新增一個空行,然後編寫匯入你自己編寫的模組的import 語句。在包含多 條import 語句的程式中,這種做法讓人更容易明白程式使用的各個模組都來自何方。