首頁 > 軟體

Python類和物件基礎入門介紹

2022-08-05 18:00:12

視訊

觀看視訊

Python 類和物件

物件導向程式設計是編寫表示現實世界中的事物和情景的類,並基於這些類來建立物件。

編寫類時,你定義一大類物件都有的通用行為。基於類建立物件時,每個物件都自動具備這種通用行為,然後可根據需要賦予每個物件獨特的個性。使用物件導向程式設計可模擬現實情景,其逼真程度達到了令你驚訝的地步。

根據類來建立物件被稱為範例化,這是能夠使用類的範例。

物件導向最重要的概念就是類(Class)和範例(Instance),必須牢記類是抽象的模板,比如Dog類,而範例是根據類建立出來的一個個具體的“物件”,每個物件都擁有相同的方法,但各自的資料可能不同。

建立和使用類

Python定義類是通過class關鍵字:

class Dog(object): # 若不提供object,預設的也是object
    pass

class後面跟著類名,即Dog,類名通常首字母大寫,(object)表示該類是從哪個類繼承下來的,如果沒有合適的繼承類,就使用object類,這是所有類最終都會繼承的類。

可以建立Dog類的範例,建立範例是通過類名+()實現的:

>>> bart = Dog()
>>> bart
<__main__.Dog object at 0x10a67a590>
>>> Dog
<class '__main__.Dog'>

變數bart指向的是一個Dog的範例,後面的0x10a67a590是記憶體地址,每個object的地址都不一樣,Dog是一個類。

假設Dog類建立的每個範例都將儲存名字和年齡。賦予每條小狗蹲下sit()和打滾roll_over()的能力:

dog.py

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

第1行:定義了一個名為Dog的類。根據約定,在Python中,首字母大寫的名稱指的是類。這個類定義中的括號是空的,因為要從空白建立這個類。

第2行:編寫了一個檔案字串,對這個類的功能作了描述。

方法__init__()

類中的函數稱為方法;有關函數的一切都適用於方法,就目前而言,唯一重要的差別是呼叫方法的方式。

第3行:方法__init__()是一個特殊的方法,每當你根據Dog類建立新範例時,Python都會自動執行它。在這個方法的名稱中,開頭和末尾各有兩個下劃線,這是一種約定,旨在避免Python預設方法與普通方法發生名稱衝突。

將方法__init__()定義成了包含三個形參:self、name和age。在這個方法的定義中,形參self必不可少,還必須位於其他形參的前面。為何必須在方法定義中包含形參self呢?因為,Python呼叫這個__init__()方法來建立Dog範例時,將自動傳入實參self。每個與類相關聯的方法呼叫都自動傳遞實參self,它是一個指向範例本身的參照,讓範例能夠存取類中的屬性和方法。

建立Dog範例時,Python將呼叫Dog類的方法__init__()。將通過實參向Dog()傳遞名字和年齡;self會自動傳遞,因此不需要傳遞它。每當根據Dog類建立範例時,都只需給最後兩個形參(name和age)提供值。

第5、6行:定義的兩個變數都有字首self。以self為字首的變數都可供類中的所有方法使用,還可以通過類的任何範例來存取這些變數。self.name = name獲取儲存在形參name中的值,並將其儲存到變數name中,然後該變數被關聯到當前建立的範例。self.age = age的作用與此類似。

像這樣可通過範例存取的變數稱為屬性。

Dog類還定義了另外兩個方法:sit()和roll_over()。由於這些方法不需要額外的資訊,如名字或年齡,因此它們只有一個形參self。後面將建立的範例能夠存取這些方法,換句話說,它們都會蹲下和打滾。

根據類建立範例

可將類視為有關如何建立範例的說明。Dog類是一系列說明,讓Python知道如何建立表示特定小狗的範例。

下面來建立一個表示特定小狗的範例:

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.") 

第1行:讓Python建立一條名字為’willie’、年齡為6的小狗。遇到這行程式碼時,Python使用實參’willie’和6呼叫Dog類中的方法__init__()

方法__init__()建立一個表示特定小狗的範例,並使用提供的值來設定屬性name和age。方法__init__()並未顯式地包含return語句,但Python自動返回一個表示這條小狗的範例。將這

個範例儲存在變數my_dog中。在這裡,命名約定很有用:通常可以認為首字母大寫的名稱指的是類,而小寫的名稱指的是根據類建立的範例。

存取屬性

要存取範例的屬性,可使用句點表示法。

第2行:編寫了如下程式碼來存取my_dog的屬性name的值:

my_dog.name

句點表示法在Python中很常用,這種語法演示了Python如何獲悉屬性的值。在這裡,Python先找到範例my_dog,再查詢與這個範例相關聯的屬性name。在Dog類中參照這個屬性時,使用的是self.name。在前面的第1條print語句中,my_dog.name.title()將my_dog的屬性name的值’willie’改為首字母大寫的;在第2條print語句中,str(my_dog.age)將my_dog的屬性age的值6轉換為字串。

輸出是有關my_dog的摘要:

My dog’s name is Willie.

My dog is 6 years old.

呼叫方法

根據Dog類建立範例後,就可以使用句點表示法來呼叫Dog類中定義的任何方法。下面來讓小狗蹲下和打滾:

my_dog = Dog('willie', 6) 
my_dog.sit() 
my_dog.roll_over() 

要呼叫方法,可指定範例的名稱和要呼叫的方法,並用句點分隔它們。遇到程式碼my_dog.sit()時,Python在類Dog中查詢方法sit()並執行其程式碼。

Willie按的命令做了:

Willie is now sitting.

Willie rolled over!

這種語法很有用。如果給屬性和方法指定了合適的描述性名稱,如name、age、sit()和roll_over(),即便是從未見過的程式碼塊,也能夠輕鬆地推斷出它是做什麼的。

建立多個範例

可按需求根據類建立任意數量的範例。下面再建立一個名為your_dog的範例:

my_dog = Dog('willie', 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() 
print("nYour dog's name is " + your_dog.name.title() + ".") 
print("Your dog is " + str(your_dog.age) + " years old.") 
your_dog.sit() 

在這個範例中,建立了兩條小狗,它們分別名為Willie和Lucy。每條小狗都是一個獨立

的範例,有自己的一組屬性,能夠執行相同的操作:

My dog’s name is Willie.

My dog is 6 years old.

Willie is now sitting.

Your dog’s name is Lucy.

Your dog is 3 years old.

Lucy is now sitting.

就算給第二條小狗指定同樣的名字和年齡,Python依然會根據Dog類建立另一個範例。

你可按需求根據一個類建立任意數量的範例,條件是將每個範例都儲存在不同的變數中,或佔用列表或字典的不同位置。

到此這篇關於Python類和物件基礎入門介紹的文章就介紹到這了,更多相關Python類與物件內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com