<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在Python中,類表示具有相同屬性和方法的物件的集合。在使用類時,需要先定義類,然後再建立類的範例,通過類的範例就可以存取類中的屬性和方法了。
在Python中,類的定義使用class關鍵字來實現,語法如下:
class ClassName: 「」「類的幫助資訊」「」 # 類文字字串 statement # 類體
引數說明:
class Geese: """大雁類""" pass
定義完成後,並不會真正建立一個範例。這就好比一個汽車的設計圖。設計圖可以告訴你汽車看上去怎麼樣,但設計圖本身不是一個汽車。你不能開走它,它只能用來建造真正的汽車,而且可以使用它製造很多汽車。那麼如何建立範例呢?
class語句本身並不建立該類的任何範例。所以在類定義完成以後,可以建立類的範例,即範例化該類的物件。建立類的範例的語法如下:
ClassName(parameterlist)
引數說明:
例如,建立上面Geese類的範例,可以使用下面程式碼:
# 建立類 class Geese: """大雁類""" pass # 建立範例 wildGoose = Geese() print(wildGoose)
執行上面程式碼後,將顯示類似下面的內容:
從上面的執行結果中可以看出,wildGoose是Geese類的範例。
在建立類後,類通常會自動建立一個__init__()方法。該方法是一個特殊的方法,類似JAVA 語言中的構造方法。每當建立一個類的新範例時,Python都會自動執行它。init()方法必須包含一個引數,並且必須是第一引數。self引數是一個指向範例本身的參照,用於存取類中的屬性和方法。
在方法呼叫時會自動傳遞實際引數self。因此,當__init__()方法只有一個引數時,在建立類的範例時,就不需要指定引數了。
例如,下面乃然以大雁為例,並建立__init__()方法,程式碼如下:
# 建立類 class Geese: """大雁類""" def __init__(self): print("我是大雁類") wildGoose = Geese()
執行以上程式碼,將輸出以下內容:
常見錯誤:
在為類建立__init__()方法時,在開發環境中執行下面的程式碼:
# 建立類 class Geese: """大雁類""" def __init__(): # 構建方法 print("我是大雁類") wildGoose = Geese() # 建立大雁範例
執行上述程式碼,將丟擲以下異常:
在__init__()方法中,除了self引數外,還可以自定義一些引數,引數間使用逗號“,”進行分隔。例如,下面的程式碼將在建立__init__()方法時,再指定3個引數,分別是beak、wing和claw:
# 建立類 class Geese: """大雁類""" def __init__(self, beak, wing, claw): print("我是大雁類!我有一下特徵:") print(beak) print(wing) print(claw) beak_1 = "喙" wing_1 = "翅膀" claw_1 = "爪" wildGoose = Geese(beak_1, wing_1, claw_1)
執行上面程式碼,將顯示以下結果:
類的成員主要由實體方法和資料成員組成。在類中建立了類的成員後,可以通過類的範例進行存取。下面進行詳細介紹。
所謂實體方法是指在類中定義函數。該函數是一種在類的範例上操作的函數。同__init__()方法一樣,實體方法的第一引數必須是self,並且必須包含一個self引數。
建立範例的方法的語法格式如下:
def functionName(self,parameterlist): block
引數說明:
範例建立完成後,可以通過類的範例名稱和點(.)操作符進行存取。
具體的語法格式如下:
instanceName.functionName(parametervalue)
引數說明:
資料成員是指類中定義的變數,即屬性,根據定義位置,又可以分為類屬性和範例屬性,下面分別進行介紹。
類屬性:類屬性是指在定義類中,並且在函數體外的屬性。類屬性可以在類的所有範例之間共用值,也就是在所有範例化的物件中公用。
例如,定義一個雁類,在該類中定義3個屬性,用於記錄雁的特徵,程式碼如下:
class Geese: """大雁類""" beak_1 = "喙,比較尖" # 定義類屬性(喙) wing_1 = "翅膀,比較大" claw_1 = "爪,行走自如" def __init__(self): print("我是大雁類!我有一下特徵:") print(Geese.beak_1) # 輸出喙的屬性 print(Geese.wing_1) print(Geese.claw_1)
建立上面的類Geese,然後建立類的範例,程式碼如下:
goose = Geese() # 範例化一個雁的物件
執行上面程式碼建立Geese類的範例後,將顯示以下內容:
範例屬性:
範例屬性是指定義在類的方法中的屬性,只作用於當前範例中。
例如,定義一個雁類Geese,在該類的__init__()方法中定義3個範例屬性,用於記錄雁類的特徵,程式碼如下:
# 建立類 class Geese: """大雁類""" def __init__(self): self.beak_1 = "喙,比較尖" # 定義範例屬性(喙) self.wing_1 = "翅膀,比較大" self.claw_1 = "爪,行走自如" print("我是大雁類!我有一下特徵:") print(self.beak_1) # 輸出喙的屬性 print(self.wing_1) print(self.claw_1)
建立上面的類Geese,然後建立類的範例,程式碼如下:
goose = Geese() # 範例化一個雁的物件
執行上面程式碼建立Geese類的範例後,將顯示以下內容:
說明:
範例屬性只能通過範例名存取。如果通過類名存取範例屬性,將丟擲如圖所示的異常。
對於範例的屬性也可以通過範例名稱修改,與類不同,通過範例名稱修改範例屬性後,並不能影響該類的其他範例中相應的範例屬性值。例如,定義一個雁類,並在__init__()方法中定義一個範例屬性,然後建立兩個Geese類的範例,並修改一個範例屬性,最後分別輸出範例屬性,程式碼如下:
# 建立類 class Geese: """大雁類""" def __init__(self): self.beak_1 = "喙,比較尖" # 定義範例屬性(喙) print(self.beak_1) goose1 = Geese() # 建立Geese範例1 goose2 = Geese() # 建立Geese範例2 goose1.beak_1 = "喙,比長鵝尖" # 修改範例屬性 print("goose1的beak_1屬性:", goose1.beak_1) print("goose2的beak_1屬性:", goose2.beak_1)
執行上面程式碼,將顯示以下內容:
在類的內部可以定義屬性和方法,而在類的外部則可以直接呼叫屬性或方法來運算元據,從而隱藏了類內部的複雜邏輯。但Python並沒有對屬性和方法的存取許可權進行限制。為了保證類內部的某些屬性或方法不被外部所存取,可以在屬性或方法名前面新增單下劃線(_foo)、雙下劃線(__foo)或者首尾加雙下劃線( __ foo __),從而限制存取許可權。其中,單下劃線、雙下劃線、首尾雙下劃線的作用如下:
例如,建立一個Swan類,定義保護屬性_neck_swan,並在__init__()方法中存取該屬性,然後建立Swan類的範例,並通過範例名輸出保護屬性_neck_swan,
程式碼如下:
class Swan: """天鵝類""" _neck_swan = "天鵝脖子長" # 建立私有屬性 def __init__(self): print("__init__():", Swan._neck_swan) swan = Swan() # 建立Swan類 print("直接存取:", swan._neck_swan)
執行以上程式碼,將顯示以下內容:
從上面的執行結果中可以看出:保護屬性可以通過範例名存取。
__foo:雙下劃線表示private(私有)型別的成員,只允許定義該方法的類本身進行存取,而且也不能通過類的範例進行存取,但是可以通過“類的範例名.類名 __xxx”方式存取。
例如,建立一個Swan類,定義保護屬性__neck_swan,並在__init__()方法中存取該屬性,然後建立Swan類的範例,並通過範例名輸出保護屬性__neck_swan,
程式碼如下:
# 建立類 class Geese: """大雁類""" def __init__(self, beak, wing, claw): print("我是大雁類!我有一下特徵:") print(beak) print(wing) print(claw) beak_1 = "喙" wing_1 = "翅膀" claw_1 = "爪" wildGoose = Geese(beak_1, wing_1, claw_1)
執行上面程式碼,將輸出如圖所示的結果:
從上面的執行結果可以看出:私有屬性可以通過“類名.屬性名”方式存取,也可以通過“範例名.類名__xxx”方式存取,但是不能直接通過“範例名.屬性名”方式存取。
到此這篇關於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