<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在物件導向的程式設計過程中有兩個重要概念:類(class
)和物件(object
,也被稱為範例,instance),其中類是某一批物件的抽象,可以把類理解成某種概念;物件才是一個具體存在的實體。從這個意義上看,日常所說的人,其實都是人的物件,而不是人類。
Python 定義類的簡單語法如下:
class 類名:
執行語句...
零個到多個類變數...
零個到多個方法...
類名只要是一個合法的識別符號即可,但這僅僅滿足的是 Python 的語法要求:如果從程式的可讀性方面來看,Python 的類名必須是由一個或多個有意義的單詞連綴而成的,每個單詞首字母大寫,其他字母全部小寫,單詞與單詞之間不要使用任何分隔符。
從上面定義來看,Python 的類定義有點像函數定義,都是以冒號(:)作為類體的開始,以統一縮排的部分作為類體的。區別只是函數定義使用 def 關鍵字,而類定義則使用 class 關鍵字。
Python 的類定義由類頭(指 class 關鍵字和類名部分)和統一縮排的類體構成,在類體中最主要的兩個成員就是類變數和方法。如果不為類定義任何類變數和方法,那麼這個類就相當於一個空類,如果空類不需要其他可執行語句,則可使用 pass 語句作為預留位置。
例如,如下類定義是允許的:
class Empty: pass
通常來說,空類沒有太大的實際意義。
類中各成員之間的定義順序沒有任何影響,各成員之間可以相互呼叫。
Python 類所包含的最重要的兩個成員就是變數和方法,其中類變數屬於類本身,用於定義該類本身所包含的狀態資料:而範例變數則屬於該類的物件,用於定義物件所包含的狀態資料:方法則用於定義該類的物件的行為或功能實現。
Python 是一門動態語言,因此它的類所包含的類變數可以動態增加或刪除(程式在類體中為新變數賦值就是增加類變數),程式也可在任何地方為已有的類增加變數;程式可通過 del 語句刪除己有類的類變數。
類似的是,Python 物件的範例變數也可以動態增加或刪除(只要對新範例變數賦值就是增加範例變數),因此程式可以在任何地方為己有的物件增加範例變數;程式可通過 del 語句刪除已有物件的範例變數。
在類中定義的方法預設是實體方法,定義實體方法的方法與定義函數的方法基本相同,只是實體方法的第一個引數會被繫結到方法的呼叫者(該類的範例),因此實體方法至少應該定義一個引數,該引數通常會被命名為 self。
注意:實體方法的第一個引數並不一定要叫 self,其實完全可以叫任意引數名,只是約定俗成地把該引數命名為 self,這樣具有最好的可讀性。
在實體方法中有一個特別的方法:__init__,
這個方法被稱為構造方法。構造方法用於構造該類的物件,Python 通過呼叫構造方法返回該類的物件(無須使用 new)。
Python 中很多這種以雙下劃線開頭、雙下劃線結尾的方法,都具有特殊的意義,本教學後面還會詳細介紹這些特殊的方法。
構造方法是一個類建立物件的根本途徑,因此 Python 還提供了一個功能:如果開發者沒有為該類定義任何構造方法,那麼 Python 會自動為該類定義一個只包含一個 self
引數的預設的構造方法。
下面程式將定義一個 Person 類:
class Person : '這是一個學習Python定義的一個Person類' # 下面定義了一個類變數 hair = 'black' def __init__(self, name = 'Charlie', age=8): # 下面為Person物件增加2個範例變數 self.name = name self.age = age # 下面定義了一個say方法 def say(self, content): print(content)
上面的 Person
類程式碼定義了一個構造方法,該構造方法只是方法名比較特殊:__init__
,該方法的第一個引數同樣是 self,被繫結到構造方法初始化的物件。
與函數類似的是,Python 也允許為類定義說明檔案,該檔案同樣被放在類宣告之後、類體之前,如上面程式中第二行的字串所示。
在定義類之後,接下來即可使用該類了。
Python 的類大致有如下作用:
# coding:utf-8 if __name__ == '__main__': ''' 定義:class 類名(object): 類屬性,方法等...... 範例化: 類名(無參|引數......) ''' class A(object): pass a = A() print(a) # <__main__.A object at 0x00D9DD50>
# coding:utf-8 if __name__ == '__main__': ''' 定義:通過def + 方法名(self,引數1,引數2......) self是必須的 呼叫:object.方法名(引數1,引數2......) ''' class B(object): sex = 'man' def talk(self, name): print(name) b = B() b.talk('ok') # ok
# coding:utf-8 if __name__ == '__main__': ''' 在宣告類的時候指定這個類繼承哪些類 class 類名(extend1,extend2.......): 屬性,方法...... extend1,extend2 代表要繼承的類。可以一次性繼承多個類 繼承順序為從左到右,如果繼承的方法或屬性重複,以先繼承的為主 class.__mro__ 檢視類的繼承鏈 ''' class C(object): sex = 'woman' def see(self, name): print(f'看{name}') def talk(self, name): print(f'說{name}') class D(B, C): pass d = D() d.talk('yes') # yes 不是 說yes 以先繼承的為主 d.see('書') # 看書 print(d.sex) # man 不是 woman 以先繼承的為主 print(D.__mro__) # (<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class 'object'>)
# coding:utf-8 if __name__ == '__main__': ''' 私有屬性定義: __+變數名 私有方法定義: __+函數名(self,引數1,引數2......) 私有外部無法存取,只能內部存取。但是私有屬性可以在外部通過object._+類名__+變數名 強制存取 ''' class E(object): __name = 'xie' sex = 'man' def __talk(self, name): print(name) def run(self): self.__talk('ok') def dp(self): print(self.__name) e = E() # print(e.__name) Error 外部無法存取私有屬性 D print(e.sex) # man # e.__talk('yes') Error 外部無法存取私有方法 # object._+類名__+變數名 強制存取 print(e._E__name) # xie e.run() # ok e.dp() # xie
# coding:utf-8 if __name__ == '__main__': ''' 通過super().方法(引數1,引數2......)呼叫,該用法要求python版本3以上 或 supper(子類名,self).方法(引數1,引數2......) ''' class F(object): def talk(self, name): print(f'super name is {name}') class G(F): def talk(self, children_name, super_name): self.print_children_name(children_name) super().talk(super_name) def talk2(self, children_name, super_name): self.print_children_name(children_name) super(G, self).talk(super_name) def print_children_name(self, name): print(f'children name is {name}') g = G() g.talk('小明', '大明') # children name is 小明 super name is 大明 g.talk2('小明', '大明') # children name is 小明 super name is 大明
到此這篇關於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