Python系列面向對象“類”之類成員

      網友投稿 712 2022-05-29

      今天就帶著大家開始我們——Python學習的第十八課,Python基礎之類成員(3)。

      這一節,我想帶著大家學習以下知識:

      類屬性與實例屬性;

      類方法與實例方法;

      靜態方法;

      1. 類屬性與實例屬性

      類屬性與當前類相關(綁定的是當前類),與當前類創建的任何對象無關;

      實例屬性與當前對象相關(綁定的是當前對象);

      對于類屬性,可以通過類名,進行訪問,也可以通過對象進行訪問。但是,通過對象進行訪問,屬于“只讀訪問”,我們不能對其進行修改;

      對于實例屬性,只能通過創建的對象,進行訪問,不能通過類名進行訪問;

      不同對象都一致(完全一樣)的屬性,定義為"類屬性",被大家共享。像desc = “人的描述”,只有一個。

      不同對象都不一樣的屬性,定義為"實例屬性",被個人獨享。像name,age,不同對象一般是不同的。

      再次提醒:實例屬性定義在init方法中,是不同對象所獨享;類屬性定義在類中,能被不同對象共享。

      下面來看一個案例:

      class Person: # 類屬性 desc = "人的描述" def __init__(self,name,age): # 實例屬性 self.name = name self.age = age p = Person("黃同學",26)

      強烈建議,類屬性總是通過類名去訪問。

      通過對象修改類屬性,其實并不是修改類屬性,而是動態地給對象p增加了一個屬性desc,只不過這個屬性名desc,和類屬性desc,具有相同的名稱而已。

      實例屬性只能夠通過,創建的對象,進行訪問。

      class Person: # 類屬性 desc = "人的描述" def __init__(self,name,age): # 實例屬性 self.name = name self.age = age p = Person("黃同學",26)

      實例屬性: 實例屬性是對象獨享的,每個對象都有自己的實例屬性,彼此之間不受干擾。某個對象改變了自身的實例屬性,對其他對象不會造成影響。

      類屬性: 類屬性為類所有。由所有對象所共享(不屬于任何對象)。一旦類屬性發生了改變,會影響到所有對象。

      2. 類方法與實例方法

      我們先來看一個例子:

      class Person: # 實例方法 def walk(self): print("走路") # 類方法,使用@classmethod修飾 # 類方法的第一個參數是固定的。根據慣例,將其命名為cls。但這也不是必須的。 @classmethod def cm(cls): # cls就是Person print("這是類方法") print(cls is Person) p = Person()

      觀察上述例子,對于類方法,有下面幾點需要注意:

      注意1 : 類方法,使用@classmethod修飾;

      注意2 : 類方法的第一個參數是固定的。根據慣例,將其命名為cls;

      注意3 : cls就是Person;

      注意4 : 類方法的第一個參數會隱式傳遞,無需我們顯式傳遞;

      有兩種方法可以訪問類方法。但是強烈建議,類方法通過類名來訪問。

      實例方法只能通過對象訪問,而不能通過類名訪問。

      通過類名也不是不能訪問實例訪問,只是需要我們傳入一個對象。盡管語法支持,但是不建議這樣做。

      實例方法 : 既可以通過對象調用實例方法,也可以通過類名調用實例方法。只不過通過類名調用實例方法,需要顯示傳遞對象,畫蛇添足,不建議這么做。

      類方法 : 既可以通過類名調用類方法,也可以通過對象調用類方法。但是,強烈建議,通過類名調用類方法。

      3. “類方法”與“實例方法”,對“類中屬性”進行訪問

      最好,通過實例方法訪問實例屬性,通過類方法訪問類屬性。

      class Person: desc = "人的描述" def __init__(self,name): self.name = name def walk(self): # 實例方法訪問實例屬性 print(self.name + " is walking") @classmethod def c_m(cls): # 盡管這種方式可以修改類屬性。但是屬于硬編碼(表示代碼寫的太死了),不建議這么做 # Person.desc = "abcd" # 假如以后類名Person修改了,這里還需要修改 # 因為cls就是Person,所以可以用以下方式修改類屬性 cls.desc = "abcd" # 以后就算是:類名Person修改了,這里也不用動。 p = Person("張三") p1 = Person("李四")

      結果如下:

      4. 靜態方法

      先來看一個例子:

      class Person: @staticmethod def s_m(): print("這是靜態方法") # 因為沒有self和cls。既不能訪問類屬性,也不能訪問實例屬性。但是有什么用呢?沒多大作用,其實。不用太關心這個 p = Person()

      結果如下:

      Python系列:面向對象“類”之類成員

      通過上面的例子,關于靜態方法需要注意以下幾點:

      注意1 : 靜態方法使用@staticmethod 修飾,也與所創建的對象無關;

      注意2 : 沒有self和cls參數。不能訪問類屬性,也不能訪問實例屬性。但是有什么用呢?沒多大作用;

      注意3 : 靜態方法最好通過類名去訪問,雖然對象也可以訪問;

      Python 面向對象編程

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Android四大組件(詳細總結)
      下一篇:【Unity3D日常開發】Unity3D中實現計時器工具類-正計時、倒計時、暫停計時、加速計時
      相關文章
      亚洲色图国产精品| 久久亚洲国产精品五月天| 亚洲美女视频免费| 亚洲av永久无码精品网站| 亚洲精品国产va在线观看蜜芽| 国产亚洲欧美在线观看| 亚洲精品国产摄像头| 亚洲另类无码专区首页| 亚洲色成人四虎在线观看| 亚洲欧美第一成人网站7777| 亚洲国产欧美国产综合一区 | 亚洲一区二区三区免费观看| 亚洲综合久久1区2区3区| 噜噜噜亚洲色成人网站∨| 亚洲成人在线免费观看| 久久狠狠爱亚洲综合影院| 亚洲一区二区三区国产精华液| 亚洲美国产亚洲AV| 国产午夜亚洲精品不卡| 国产精品亚洲视频| 国产亚洲人成无码网在线观看| 久久久久亚洲AV成人无码网站| 亚洲黄色在线观看视频| 亚洲制服丝袜在线播放| 最新亚洲春色Av无码专区| 蜜芽亚洲av无码一区二区三区 | 婷婷亚洲综合五月天小说在线| 国产亚洲人成在线影院| 亚洲综合色区在线观看| 国产av天堂亚洲国产av天堂 | 亚洲精品和日本精品| 亚洲中文字幕久久精品无码喷水| 国产亚洲人成网站在线观看不卡| 青青草原精品国产亚洲av| 亚洲人成7777影视在线观看| 亚洲人片在线观看天堂无码| 日韩精品电影一区亚洲| 亚洲色欲一区二区三区在线观看| 亚洲综合久久综合激情久久| 国产成人精品日本亚洲11| 色婷婷六月亚洲综合香蕉|