- 類將函數和數據整潔地封裝起來,讓你能夠靈活而高效地使用它們。
- 面向對象編程是最有效的軟件編寫方法之一。編寫表示現實世界中的事物和情景的類,并基于這些類來創建對象,編寫類時,定義一大類對象都有的通用行為,基于類創建的對象都自動具備這種通用行為,又可以根據需要賦予每個對象獨特的個性,使用面向對象編程可模擬現實情景。
- 根據類來創建對象稱為實例化,這讓你能夠使用類的實例。
- 使用類幾乎可以模擬任何東西。
下面編寫一個表示小狗的簡單類Dog--它表示的不是特定的小狗,而是任何小狗。
對于大多數寵物狗,它們都有名字和年齡,大多數小狗還會蹲下和打滾,現在創建一個Dog類包含它們。這個類讓python知道如何創建表示小狗的對象。編寫這個類后,我們將使用它來創建表示特定小狗的實例。
9.1.1創建Dog類
"""根據Dog類創建的每個實例都將存儲名字和年齡。我們賦予了每條小狗蹲下(sit())和打滾(roll_over())的能力"""
"""根據約定,在python中首字母大寫的名稱指的是類。"""
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()+"roll over!")
"""
說明:
1.__innt__()為默認方法,每當根據Dog類創建新實例時,python都會自動運行它。
2.__innt__()中self形參必不可少,且必須位于其它形參前面。
因為在調用這個方法創建實例時,將自動傳入實參self,每個與類相關聯的方法調用都自動傳遞實參self,它是一個指向實例本身的引用,讓實例能夠訪問類中的屬性一和方法。
創建Dog類實例時,我們將通過實參向Dog類傳遞名字和年齡,self會自動傳遞,因此我們只需給量后形參(name和age)提供值。
3.以self為前輟的變量都可供類中的所有方法使用,也可以通過類的任何實例來訪問這些變量。如self.name=name獲取形參name中的值,
并將其存儲到變量name中。像這樣可以通過實例來訪問的變量稱為屬性。
"""
9.1.2 根據類創建實例
可將類視為有關如何創建實例的說明。Dog類是一系列說明,讓python知道中何創建表示特定小狗的實例。
下面來創建一個表示特定小狗的實例:
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()+"roll over!")
#下面來創建一個表示特定小狗的實例
my_dog=Dog("willie",6)
print("my dog's name is "+my_dog.name.title()+".")
print("my dog is "+str(my_dog.age)+"years old.")
運行結果:
>>>
================== RESTART: D:/python學習/第9章 類/9.1/Dog實例.py ==================
my dog's name is Willie.
my dog is 6years old.
>>>
1.訪問屬性
要訪問實例的屬性,可使用句點表示法。如:my_dog.name 訪問my_dog的屬性name的值。
2.調用方法
根據Dog類創建實例后,就可以使用句點表示法來調用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()+"roll over!")
"""根據Dog類創建實例后,就可以使用句點表示法來調用Dog類中定義的任何方法
下面來創建一個實例讓小狗蹲下和打滾
"""
my_dog=Dog("willie",6)
my_dog.sit()
my_dog.roll_over()
運行結果及說明:
要調用方法,可指定實例的名稱(這里是my_dog)和要調用的方法,并用句點分隔。
執行my_dog.sit()時,python在類Dog中查找方法sit()并運行其代碼。
Willie按我們的命令做了: >>> ================== RESTART: D:/python學習/第9章 類/9.1/Dog實例2.py ================== Willieis now sitting Willieroll over! >>>
3. 創建多個實例
可按需求根據類創建任意數量的實例。下面再創建一個名為your_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()+"roll over!")
"""根據Dog類創建實例后,就可以使用句點表示法來調用Dog類中定義的任何方法
下面來創建兩個實例my_dog蹲下和your_dog打滾
"""
my_dog=Dog("willie",6)
your_dog=Dog("luky",3)
print("my dog's name is "+my_dog.name.title()+".")
print("my dog is "+str(my_dog.age)+"years old.")
my_dog.sit()
print("\n\n")
print("your dog's name is "+your_dog.name.title()+".")
print("your dog is "+str(your_dog.age)+"years old.")
your_dog.roll_over()
運行結果:
>>>
================== RESTART: D:/python學習/第9章 類/9.1/Dog實例3.py ==================
my dog's name is Willie.
my dog is 6years old.
Willieis now sitting
your dog's name is Luky.
your dog is 3years old.
Lukyroll over!
>>>
浙公網安備 33010602011771號