(22)python類(2)

4.2 使用類和實例

可以使用類來模擬現(xiàn)實世界中的很多情景。類編寫好后,程序的大部分時間都將花在使用根據(jù)類創(chuàng)建的實例上。你需要執(zhí)行的一個重要任務是修改實例的屬性。

4.2.1 示例:Car 類

編寫一個表示汽車的類,它存儲了有關汽車的信息,還有一個匯總這些信息的方法:

class Car():

? ? '''模擬汽車'''

? ? def __init__(self,make,model,year):

? ? ? ? '''初始化汽車屬性'''

? ? ? ? self.make = make

? ? ? ? self.model = model

? ? ? ? self.year = model

? ? def get_descriptive_name(self):

? ? ? ? '''獲取汽車的描述信息'''

? ? ? ? long_name = str(self.year) + ' ' + self.make + ' ' + self.model

? ? ? ? return long_name.title()

my_new_car = Car('audi', 'a4', 2016)

print(my_new_car.get_descriptive_name())

示例說明:

? 定義了方法__init__() 。與前面的Dog 類中一樣,這個方法的第一個形參為self ;我們還在這個方法中包含了另外三個形參:make 、model 和year 。方法__init__() 接受這些形參的值,并將它們存儲在根據(jù)這個類創(chuàng)建的實例的屬性中。創(chuàng)建新的Car 實例時,我們需要指定其制造商、型號和生產(chǎn)年份。

? 定義了一個名為get_descriptive_name() 的方法,它使用屬性year 、make 和model 創(chuàng)建一個對汽車進行描述的字符串,讓我們無需分別打印每個屬性的值。為在這個方法中訪問屬性的值,我們使用了self.make 、self.model 和self.year 。

? 根據(jù)Car 類創(chuàng)建了一個實例,并將其存儲到變量my_new_car中。

? 接下來調(diào)用方法get_descriptive_name() ,指出我們擁有的是一輛什么樣的汽車


4.2.2 給屬性指定默認值

類中的每個屬性都必須有初始值,哪怕這個值是0或空字符串。在有些情況下,如設置默認值時,在方法__init__() 內(nèi)指定這種初始值是可行的;如果你對某個屬性這樣做了,就無需包含為它提供初始值的形參。

示例:在前面例子的基礎上添加一個名為odometer_reading 的屬性,其初始值總是為0。同時還添加了一個名為read_odometer() 的方法,用于讀取汽車的里程表:

class Car():

? ? '''模擬汽車'''

? ? def __init__(self,make,model,year):

? ? ? ? '''初始化汽車屬性'''

? ? ? ? self.make = make

? ? ? ? self.model = model

? ? ? ? self.year = year

? ? ? ? self.odometer_reading = 0 #定義新屬性,初始值為0

? ? def get_descriptive_name(self):

? ? ? ? '''獲取汽車的描述信息'''

? ? ? ? long_name = str(self.year) + ' ' + self.make + ' ' + self.model

? ? ? ? return long_name.title()

? ? def read_odometer(self):? ? #定義新方法

? ? ? ? '''讀取汽車的里程數(shù)'''

? ? ? ? print("This car has " + str(self.odometer_reading) + " miles on it")

my_new_car = Car('audi', 'a4', 2016)

print(my_new_car.get_descriptive_name())

my_new_car.read_odometer()


4.2.3 修改屬性的值

可以以三種不同的方式修改屬性的值:

? 直接通過實例進行修改;

? 通過方法進行設置;

? 通過方法進行遞增(增加特定的值)。


4.2.3.1 直接修改屬性的值

要修改屬性的值,最簡單的方式是通過實例直接訪問它。

示例:下面的代碼直接將年份設置為2020,里程表讀數(shù)設置為23:

my_new_car = Car('audi', 'a4', 2016)

my_new_car.year = 2020

my_new_car.odometer_reading = 23

my_new_car.read_odometer()


4.2.3.2 通過方法修改屬性的值

定義更新屬性的方法,就無需直接訪問屬性,而可將值傳遞給一個方法,由它在內(nèi)部進行更新。

下面的示例定義了update_year()和update_odometer() 的方法:

def update_year(self, year):

? ? '''update year'''

? ? self.year = year

def update_odometer(self, odometer):

? ? '''update odameter'''

? ? self.odometer_reading = odometer

以下為調(diào)用方式

my_new_car = Car('audi', 'a4', 2016)

my_new_car.update_year(2020)

my_new_car.update_odometer(23)


4.2.3.3 通過方法對屬性的值進行遞增

有時候需要將屬性值遞增特定的量,而不是將其設置為全新的值。

示例:里程數(shù)遞增到里程表讀數(shù)

def increment_odometer(self,odometer):

? ? '''遞增里程數(shù)'''

? ? self.odometer_reading += odometer

my_new_car = Car('audi', 'a4', 2016)

my_new_car.increment_odometer(100)

my_new_car.increment_odometer(100)

my_new_car.read_odometer()

#里程數(shù)變?yōu)?00

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容