<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
物件導向程式設計是編寫表示現實世界中的事物和情景的類,並基於這些類來建立物件。
編寫類時,你定義一大類物件都有的通用行為。基於類建立物件時,每個物件都自動具備這種通用行為,然後可根據需要賦予每個物件獨特的個性。使用物件導向程式設計可模擬現實情景,其逼真程度達到了令你驚訝的地步。
根據類來建立物件被稱為範例化,這是能夠使用類的範例。
物件導向最重要的概念就是類(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!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45