1. 程式人生 > 其它 >python基礎知識——類

python基礎知識——類

1. 建立類和例項

  • 在python中,首字母大寫的名稱指的是類
  • 方法__init__()中,self必不可少,還必須位於其他形參前面,此方法的名稱中,開頭和末尾各有兩個下劃線
  • 每當根據類建立新例項時,python都會自動執行__init__(),雖然方法__init__()並未顯式地包含return語句,但python自動返回一個當前類的例項,儲存在變數my_dog中
  • 建立例項後,可以使用句點表示法來呼叫類的屬性和方法
  • class Dog():
        '''一次模擬小狗的簡單嘗試'''
        def __init__(self, name, age):
            '''初始化屬性name和age
    ''' self.name = name self.age = age def sit(self): '''模擬小狗被命令時蹲下''' print(self.name.title() + " is now sitting.") def roll_over(self): '''模擬小狗被命令時打滾''' print(self.name.title() + " rolled over!") my_dog = Dog('willie', 6) print("My dag is " + str(my_dog.age) + "
    Tools") my_dog.sit() my_dog.roll_over()

    執行結果

    My dag is 6 years old.
    Willie is now sitting.
    Willie rolled over!

2. 使用類和例項

2.1 給屬性指定預設值

  • 設定預設值時,可以在方法__init__()中指定屬性的初始值,此時無需包含為它提供初始值的形參
  • class Car():
        '''一次模擬汽車的簡單嘗試'''
    
        def __init__(self, make, model, year):
            '''初始化描述汽車的屬性'''
            self.make 
    = make self.model = model self.year = year self.odometer = 0 def read_odometer(self): '''列印一條指出汽車裡程的訊息''' print("This car has " + str(self.odometer) + " miles on it.")

2.2 修改屬性的值

  • 直接修改屬性的值,如my_car.odometer = 23
  • 通過方法修改屬性的值,在類的定義中加上如下函式
    • def update_odometer(self, mileage):
              '''將里程錶讀數設定為指定的值'''
              self.odometer = mileage

      呼叫時

      my_car.update_odometer(23)
      my_car.read_odometer()
  • 通過方法對屬性的值進行遞增,在類的定義中加上如下函式
    • def increment_odometer(self, miles):
              '''將里程錶讀數增加指定的量'''
              self.odometer += miles

      呼叫時

      my_car.increment_odometer(200)
      my_car.read_odometer()

3. 繼承

  • 一個類繼承另一個類時,它將自動獲得另一個類的所有屬性和方法
  • 原有的類稱為父類,新類稱為子類。子類繼承了其父類的所有屬性和方法,同時還可以定義自己的屬性和方法
  •  1 class Car():
     2     '''汽車'''
     3 
     4     def __init__(self, make, model, year):
     5         '''初始化描述汽車的屬性'''
     6         self.make = make
     7         self.model = model
     8         self.year = year
     9         self.odometer = 0
    10 
    11     def read_odometer(self):
    12         '''列印一條指出汽車裡程的訊息'''
    13         print("This car has " + str(self.odometer) + " miles on it.")
    14 
    15     def get_name(self):
    16         long_name = str(self.year) + ' ' + self.make + ' ' + self.model
    17         return long_name.title()
    18 
    19 class ElectricCar(Car):
    20     '''電動汽車'''
    21 
    22     def __init__(self, make, model, year):
    23         '''初始化父類的屬性'''
    24         super().__init__(make, model, year)
    25 
    26 my_car = ElectricCar('tesla', 'model s', 2016)
    27 print(my_car.get_name())

    執行結果

    2016 Tesla Model S
    • 建立子類時,父類必須包含在當前檔案中,且位於子類前面
    • 定義子類時,必須在括號內指定父類的名稱
    • 第24行中的super()是一個特殊函式,幫助python將父類和子類關聯起來,這行程式碼讓python呼叫父類的方法__init__()
  • 對於父類的方法,子類都可對其進行重寫,為此,可在子類中定義一個這樣的方法,即它與要重寫的父類方法同名
  • 將例項用作屬性
  •  1 class Battery():
     2     '''電動汽車的電瓶'''
     3 
     4     def __init__(self, battery = 70):
     5         '''初始化電瓶的屬性'''
     6         self.battery = battery
     7 
     8     def describe_battery(self):
     9         '''列印一條描述電瓶容量的訊息'''
    10         print("This car has a " + str(self.battery) + "-KWh battery.")
    11 
    12 class ElectricCar(Car):
    13     '''電動汽車'''
    14 
    15     def __init__(self, make, model, year):
    16         '''初始化父類的屬性'''
    17         super().__init__(make, model, year)
    18         self.battery = Battery()
    19 
    20 my_car = ElectricCar('tesla', 'model s', 2016)
    21 print(my_car.get_name())
    22 
    23 my_car.battery.describe_battery()

    執行結果

    This car has a 70-KWh battery.
    • 在ElectricCar類前定義了一個名為Battery的新類
    • 在ElectricCar類中,添加了一個名為self.battery的屬性,這行程式碼讓python建立一個新的Battery例項,並將該例項儲存在屬性self.battery中
    • 現在每個ElectricCar例項都包含一個自動建立的Battery例項
    • 第23行呼叫了Battery方法

4. 匯入類

  • 為使檔案儘可能簡潔,可以將類儲存在模組中,然後在主程式中匯入所需的模組

4.1 匯入單個類

  • 通用語法為:from 模組檔名 import 類名
  • 在使用類時可直接像前面那樣使用
  • 可以根據需要在一個模組中儲存任意數量的類

4.2 從一個模組中匯入多個類

  • 可以根據需要在程式檔案中匯入任意數量的類
  • 匯入多個類時,使用逗號分隔各類

4.3 匯入整個模組

  • import car
    
    my_beetle = car.Car('volkswagen', 'beetle', 2016)
    my_tesla = car.ElectricCar('tesla', 'roadster', 2016)

4.4 匯入模組中的所有類

  • 通用語法為:from module_name import *
  • 但不推薦使用此種方法,若需要從一個模組中匯入很多類時,最好匯入整個模組

5. python標準庫

  • python標準庫是一組模組
  • 比如模組collections中的一個類——OrderedDict,它可以建立字典並記錄其中的鍵值對新增順序。OrderedDict例項的行為幾乎與字典相同,區別只在於記錄了鍵值對的新增順序
  • from collections import OrderedDict
    
    languages = OrderedDict()
    
    languages['jen'] = 'python'
    languages['sarah'] = 'c'
    languages['edward'] = 'ruby'
    
    for name, language in 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.

6. 類編碼風格

  • 類名應採用駝峰命名法:類名中的每個單詞首字母都大寫,不使用下劃線
  • 例項名和模組名都採用小寫格式,並在單詞之間加下劃線
  • 在類中,可使用一個空行來分隔方法;在模組中,可使用兩個空行來分隔類
  • 需要同時匯入標準庫中的模組和你編寫的模組時,先編寫匯入標準庫模組的import語句,再新增一個空行,然後編寫匯入你自己編寫的模組的import語句