您當前的位置:首頁 > 旅遊

Ch 9類

作者:由 丘爺爺的小迷妹 發表于 旅遊時間:2020-08-11

本文是《Python從入門到實踐》的學習筆記,之後還會繼續更新,所有程式碼均在Jupyter Notebook上執行沒有問題,可直接複製貼上,歡迎討論python學習方法,之後還會繼續更新python的學習筆記

9。1 建立和使用類

9。1。1 建立dog類

注意init是左右兩邊各兩條橫線,這是每個類中必有的函式

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!”)

9。1。2根據類建立例項

1。訪問屬性

#建立一個表示小狗的類Dog

#包含名字,年齡+動作蹲下+動作打滾

##建立Dog()例項時,透過實參向Dog()傳遞名字和年齡,self會自動傳遞

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(‘kelly’,6)

print(“My dog‘s name is ”+my_dog。name。title()+“ 。”)

print(“My dog is ”+str(my_dog。age)+“ years old。”)

2。呼叫方法

#建立一個表示小狗的類Dog

#包含名字,年齡+動作蹲下+動作打滾

##建立Dog()例項時,透過實參向Dog()傳遞名字和年齡,self會自動傳遞

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(’kelly‘,6)

print(“My dog’s name is ”+my_dog。name。title()+“ 。”)

print(“My dog is ”+str(my_dog。age)+“ years old。”)

my_dog。sit()

my_dog。roll_over()

3。建立多個例項

#建立一個表示小狗的類Dog

#包含名字,年齡+動作蹲下+動作打滾

##建立Dog()例項時,透過實參向Dog()傳遞名字和年齡,self會自動傳遞

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(‘kelly’,6)

your_dog=Dog(‘lucy’,3)

print(“My dog‘s name is ”+my_dog。name。title()+“ 。”)

print(“My dog is ”+str(my_dog。age)+“ years old。”)

my_dog。sit()

my_dog。roll_over()

print(“\nYour dog’s name is ”+your_dog。name。title()+“ 。”)

print(“Your dog is ”+str(your_dog。age)+“ years old。”)

your_dog。sit()

your_dog。roll_over()

9。2 使用類與例項

9。2。1 Car類

class Car():

“”“一次模擬汽車的簡單嘗試”“”

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

“”“初始化描述汽車的屬性”“”

self。make=make

self。model=model

self。year=year

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())

9。2。2 給屬性設定預設值

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):

“”“列印一條指出汽車裡程的訊息”“”

print(“This car has ”+str(self。odometer_reading)+“ mile on it。”)

my_new_car=Car(‘audi’,‘a4’,2016)

print(my_new_car。get_descriptive_name())

my_new_car。read_odometer()

9。2。3 修改屬性的值

1。直接修改屬性的值

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):

“”“列印一條指出汽車裡程的訊息”“”

print(“This car has ”+str(self。odometer_reading)+“ mile on it。”)

my_new_car=Car(‘audi’,‘a4’,2016)

print(my_new_car。get_descriptive_name())

my_new_car。odometer_reading=23

my_new_car。read_odometer()

2。 透過方法修改屬性的值

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):

“”“列印一條指出汽車裡程的訊息”“”

print(“This car has ”+str(self。odometer_reading)+“ mile on it。”)

def update_odometer(self,mileage):

“”“將里程錶讀數設定為指定的值”“”

self。odometer_reading=mileage

my_new_car=Car(‘audi’,‘a4’,2016)

print(my_new_car。get_descriptive_name())

my_new_car。update_odometer(23)

my_new_car。read_odometer()

也可對里程賦值函式進行擴充套件

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):

“”“列印一條指出汽車裡程的訊息”“”

print(“This car has ”+str(self。odometer_reading)+“ mile on it。”)

def update_odometer(self,mileage):

“”“將里程錶讀數設定為指定的值”“”

if mileage>=self。odometer_reading:

self。odometer_reading=mileage

else:

print(“你不能輸入比原來里程還小的值”)

my_new_car=Car(‘audi’,‘a4’,2016)

print(my_new_car。get_descriptive_name())

while True:

odometer=input(“輸入新的里程:”)

my_new_car。update_odometer(int(odometer))

my_new_car。read_odometer()

3。透過方法對屬性的值進行修改

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):

“”“列印一條指出汽車裡程的訊息”“”

print(“This car has ”+str(self。odometer_reading)+“ mile on it。”)

def update_odometer(self,mileage):

“”“將里程錶讀數設定為指定的值”“”

if mileage>=self。odometer_reading:

self。odometer_reading=mileage

else:

print(“你不能輸入比原來里程還小的值”)

def increment_odometer(self,miles):

“”“將里程錶讀數增加設定的量”“”

self。odometer_reading+=miles

my_new_car=Car(‘audi’,‘a4’,2016)

print(my_new_car。get_descriptive_name())

odometer=input(“輸入最初的里程:”)

my_new_car。update_odometer(int(odometer))

my_new_car。read_odometer()

while True:

print(“\nEnter ‘e’ to exit”)

in_odometer=input(“輸入增加的里程:”)

if in_odometer==‘e’:

break

else:

my_new_car。increment_odometer(int(in_odometer))

my_new_car。read_odometer()

9。3 繼承

9。3。1 子類的方法init()

子類繼承了父類的所有屬性和方法,同時還可以定義自己的屬性和方法

子類的方法init需要父類施以援手,在呼叫子類的init()需要先初始化父類的屬性

super()是呼叫父類的函式

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):

“”“列印一條指出汽車裡程的訊息”“”

print(“This car has ”+str(self。odometer_reading)+“ mile on it。”)

def update_odometer(self,mileage):

“”“將里程錶讀數設定為指定的值”“”

if mileage>=self。odometer_reading:

self。odometer_reading=mileage

else:

print(“你不能輸入比原來里程還小的值”)

def increment_odometer(self,miles):

“”“將里程錶讀數增加設定的量”“”

self。odometer_reading+=miles

class ElectricCar(Car):

“”“電動汽車的獨特之處”“”

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

“”“初始化父類屬性”“”

super()。__init__(make,model,year)

my_tesla=ElectricCar(‘tesla’,‘model s’,2016)

print(my_tesla。get_descriptive_name())

9。3。3 給子類定義屬性和方法

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):

“”“列印一條指出汽車裡程的訊息”“”

print(“This car has ”+str(self。odometer_reading)+“ mile on it。”)

def update_odometer(self,mileage):

“”“將里程錶讀數設定為指定的值”“”

if mileage>=self。odometer_reading:

self。odometer_reading=mileage

else:

print(“你不能輸入比原來里程還小的值”)

def increment_odometer(self,miles):

“”“將里程錶讀數增加設定的量”“”

self。odometer_reading+=miles

class ElectricCar(Car):

“”“

電動汽車的獨特之處

初始化父類的屬性,再初始化電動汽車的特有的屬性

”“”

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

“”“初始化父類屬性”“”

super()。__init__(make,model,year)

self。battery_size=70

def describe_battery(self):

“”“列印一條描述電瓶容量的訊息”“”

print(“This car has a ”+str(self。battery_size)+“-kWh battery。”)

my_tesla=ElectricCar(‘tesla’,‘model s’,2016)

print(my_tesla。get_descriptive_name())

my_tesla。describe_battery()

9。3。5 將例項用作屬性

可以將原來的一個屬性進行拓展進行深入的說明,可以將其作為一個類,例如直接將Battery()獨立出來

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):

“”“列印一條指出汽車裡程的訊息”“”

print(“This car has ”+str(self。odometer_reading)+“ mile on it。”)

def update_odometer(self,mileage):

“”“將里程錶讀數設定為指定的值”“”

if mileage>=self。odometer_reading:

self。odometer_reading=mileage

else:

print(“你不能輸入比原來里程還小的值”)

def increment_odometer(self,miles):

“”“將里程錶讀數增加設定的量”“”

self。odometer_reading+=miles

class Battery():

“”“一次模擬汽車電瓶的簡單嘗試”“”

def __init__(self,batter_size=70):

“”“初始化電瓶屬性”“”

self。batter_size=batter_size

def describe_battery(self):

“”“列印一條描述電瓶容量的訊息”“”

print(“This car has a ”+str(self。batter_size)+“-kWh battery。”)

class ElectricCar(Car):

“”“電動汽車的獨特之處”“”

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

“”“初始化父類屬性”“”

super()。__init__(make,model,year)

self。battery=Battery()

my_tesla=ElectricCar(‘tesla’,‘model s’,2016)

print(my_tesla。get_descriptive_name())

my_tesla。battery。describe_battery()

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):

“”“列印一條指出汽車裡程的訊息”“”

print(“This car has ”+str(self。odometer_reading)+“ mile on it。”)

def update_odometer(self,mileage):

“”“將里程錶讀數設定為指定的值”“”

if mileage>=self。odometer_reading:

self。odometer_reading=mileage

else:

print(“你不能輸入比原來里程還小的值”)

def increment_odometer(self,miles):

“”“將里程錶讀數增加設定的量”“”

self。odometer_reading+=miles

class Battery():

“”“一次模擬汽車電瓶的簡單嘗試”“”

def __init__(self,batter_size=70):

“”“初始化電瓶屬性”“”

self。batter_size=batter_size

def describe_battery(self):

“”“列印一條描述電瓶容量的訊息”“”

print(“This car has a ”+str(self。batter_size)+“-kWh battery。”)

def get_range(self):

range=self。batter_size*3

message=“這輛車可以走大約”+str(range)+“km路”

print(message)

class ElectricCar(Car):

“”“電動汽車的獨特之處”“”

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

“”“初始化父類屬性”“”

super()。__init__(make,model,year)

self。battery=Battery()

my_tesla=ElectricCar(‘tesla’,‘model s’,2016)

print(my_tesla。get_descriptive_name())

my_tesla。battery。describe_battery()

my_tesla。battery。get_range()

9。4 匯入類

與函式方法類似

標簽: self  odometer  name  def  print