在面向?qū)ο缶幊讨?,我們通過編寫表示現(xiàn)實(shí)世界中的事物或場景的類,并基于這些類創(chuàng)建對象。在類中我們定義了一大類對象都有的通用行為,基于類創(chuàng)建對象時(shí),每個(gè)類自動具備這種通用行為,然后可以根據(jù)需要賦予每個(gè)對象獨(dú)特的個(gè)性。
根據(jù)類創(chuàng)建對象叫做實(shí)例化。
1、創(chuàng)建類
使用類幾乎可以讓我們模擬任何東西,下面編寫一個(gè)表示餐廳的Restaurant類,它表示的不是特定的餐廳,而是任何餐廳。
class Restaurant(): def __int__(self, restaurant_name, cuisine_type): self.name = restaurant_name self.type = restaurant_type def describe_restaurant(self): print("This restaurant's name is " + self.name.title() +".")
print("This restaurant is " + self.type + "restaurant.") def open_restaurant(self): print("This restaurant is open now.")
實(shí)例化:first_restaurant = Restaurant('Peace Restaurant', Chinese)、second_restaurant = Restaurant('Summer', Italian)
訪問屬性:first_restaurant.name、second_restaurant.type
調(diào)用函數(shù):first_restaurant.describe_restaurant()、second_restaurant.open_restaurant()
2、修改類中的屬性值
我們創(chuàng)建一個(gè)Car類表示汽車,它存儲了有關(guān)汽車的信息,還有一個(gè)匯總這些信息的方法,同時(shí)添加一個(gè)隨時(shí)間變化的屬性,用它存儲汽車的總里程:
class Car(): """一次模擬汽車的簡單嘗試""" def __init__(self, make, model, year): """初始化描述汽車的屬性""" self.make = make self.model = model self.year = year self.odometer_reading = 0 def get_descriptive_name(self): """返回整潔的描述性信息""" long_name = str(self.year) + ' ' + self.make + ' ' + self.model return long_name.title()
def read_odometer(self): """打印一條指出汽車?yán)锍痰南?/span>""" print("This car has " + str(self.odometer_reading) + "miles on it."
實(shí)例化my_new_car = Car('audi', 'a4', 2016)
修改屬性odometer_reading 的值,有以下兩種方法可以實(shí)現(xiàn):
①直接修改:my_new_car.odometer_reading = 23
②通過在類中定義函數(shù),比如將里程表讀數(shù)設(shè)置為指定值,還可以通過函數(shù)使讀數(shù)增加一定的值:
def update_odometer(self, mileage): """將里程表讀數(shù)設(shè)置為指定的值""" self.odometer_reading = mileagedef increment_odometer(self, miles): """將里程表讀數(shù)增加指定的量""" self.odometer_reading += miles
3、繼承
編寫類時(shí),并非總是要從零開始,如果你要編寫的類是另一個(gè)類的特殊版本,可以使用繼承。一個(gè)類繼承另一個(gè)類時(shí),它將自動獲得另一個(gè)類的所有屬性和方法,原有的類叫父類,新類稱為子類。當(dāng)然,長江后浪推前浪,子類可以定義自己的屬性和方法。
繼承通過class 子類名(父類名): 的形式來實(shí)現(xiàn),比如新建一個(gè)電動汽車類ElectricCar繼承上面的Car類:
class ElectricCar(Car): """電動汽車的獨(dú)特之處""" def__init__(self, make, model, year): """初始化父類的屬性""" super().__init__(make, model, year)
super()是一個(gè)特殊函數(shù),能夠幫助Python將父類和子類關(guān)聯(lián)起來。這行代碼讓Python調(diào)用父類的__init__(),使子類實(shí)例包含父類的所有屬性。