<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Python從設計之初就已經是一門物件導向的語言,正因為如此,在Python中建立一個類和物件是很容易的。
在物件導向程式設計中,把資料以及對資料的操作封裝在一起,組成一個整體(物件),不同物件之間通過訊息機制來通訊或者同步。對於相同型別的物件進行分類、抽象後,得出共同的特徵而形成了類。
類的抽象具體包括兩個方面:
1.資料抽象:描述某類物件共有的屬性或狀態。
2.過程抽象:描述某類物件共有的行為或功能操作。
在python中,使用類來定義同一種型別的物件。類是廣義的資料型別,能夠定義複雜資料的特性,包括:
1.靜態特性(即資料抽象):建立類時用變數形式表示物件特徵的成員稱為屬性(資料成員)。
2.動態特性(即行為抽象,也就是對資料的操作方法):用函數形式表示物件行為的成員稱為成員方法,資料成員和成員方法統稱為類的成員。
類是實現程式碼複用和設計複用的一個重要方法,封裝、繼承、多型是物件導向程式設計的三個要素。
類是生成物件的抽象模板,物件是根據類建立出來的一個個具體的範例。
Python使用class關鍵字來定義類,class關鍵字之後是一個空格,接下來是類的名字,如果派生自其它基礎類別的話則需要把所有父類別放到一對圓括號中並使用逗號分隔,然後是一個冒號,最後換行並定義類的內部實現。
類名的首字母一般要大寫。
class Car(object): #定義一個類,派生自object類(所有類的祖先,定義類時不存在其他父類別就寫object) can_move=True #定義類屬性 def infor(self): #定義成員方法 print("This is a car")
類的方法與普通的函數只有一個特別的區別——它們必須有一個額外的第一個引數名稱, 按照慣例它的名稱是 self(self代表類的範例,而非類;self 不是 python 關鍵字,我們把他換成其他也是可以正常執行的)。
定義了類之後,就可以用來範例化物件,並通過“物件名.成員”的方式來存取其中的資料成員或成員方法。
>>>spring=Bird() #範例化物件 >>>print(Bird.have_feather) #通過類名呼叫屬性 >>>print(Bird.have_head) #通過物件名呼叫屬性 >>>spring.move() #通過物件名呼叫方法 >
類方法大體分為 3 類,分別是類方法、實體方法和靜態方法,其中實體方法用的是最多的。我們知道,實體方法的呼叫方式其實有 2種,既可以採用類物件呼叫,也可以直接通過類名呼叫。
通常情況下,我們習慣使用類物件呼叫類中的實體方法。但如果想用類呼叫實體方法,不能像如下這樣:
class Study: def info(self): print("學 Python") #通過類名直接呼叫實體方法 Study.info()
執行上面程式碼,程式會報出如下錯誤:
Traceback (most recent call last):
File "D:python3.6demo.py", line 5, in <module>
Study.info()
TypeError: info() missing 1 required positional argument: 'self'
其中,最後一行報錯資訊提示我們,呼叫 info() 類方式時缺少給 self 引數傳參。這意味著,和使用類物件呼叫實體方法不同,通過類名直接呼叫實體方法時,Python 並不會自動給 self 引數傳值。
讀者想想也應該明白,self 引數需要的是方法的實際呼叫者(是類物件),而這裡只提供了類名,當然無法自動傳值。
因此,如果想通過類名直接呼叫實體方法,就必須手動為 self 引數傳值。例如修改上面的程式碼為:
class Study: def info(self): print("學 Python") clang = Study() #通過類名直接呼叫實體方法 Study.info(clang)
再次執行程式,結果為:
學 Python
可以看到,通過手動將 clang 這個類物件傳給了 self 引數,使得程式得以正確執行。實際上,這裡呼叫實體方法的形式完全是等價於 clang.info()。
值得一提的是,上面的報錯資訊只是讓我們手動為 self 引數傳值,但並沒有規定必須傳一個該類的物件,其實完全可以任意傳入一個引數,例如:
class Study: def info(self): print(self,"學 Python") #通過類名直接呼叫實體方法 Study.info("zhangsan")
執行結果為:
zhangsan 學 Python
可以看到,“zhangsan” 這個字串傳給了 info() 方法的 self 引數。顯然,無論是 info() 方法中使用 self 引數呼叫其它類方法,還是使用 self 引數定義新的範例變數,胡亂的給 self 引數傳參都將會導致程式執行崩潰。
總的來說,Python 中允許使用類名直接呼叫實體方法,但必須手動為該方法的第一個 self 引數傳遞引數,這種呼叫方法的方式被稱為“非繫結方法”。
用類的範例物件存取類成員的方式稱為繫結方法,而用類名呼叫類成員的方式稱為非繫結方法。
在Python中,以下劃線開頭的變數名和方法名有特殊的含義,尤其是在類的定義中。
_xxx:受保護成員;
__xxx__:系統定義的特殊成員;
__xxx:私有成員,只有類物件自己能存取,子類物件不能直接存取到這個成員,但在物件外部可以通過“物件名._類名__xxx”這樣的特殊方式來存取。
注意:Python中不存在嚴格意義上的私有成員。
到此這篇關於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