400-650-7353
您所在的位置:首頁 > IT干貨資料 > python > 【Python基礎(chǔ)知識】Python類的類屬性、實(shí)例方法和類方法

【Python基礎(chǔ)知識】Python類的類屬性、實(shí)例方法和類方法

  • 發(fā)布: python培訓(xùn)
  • 來源:python干貨資料
  • 2021-02-09 15:44:34
  • 閱讀()
  • 分享
  • 手機(jī)端入口

1、類屬性

類屬性與實(shí)例屬性不同。一個(gè)類的所有實(shí)例的值都相同的屬性稱為類屬性。所有實(shí)例都共享類屬性的值。類屬性是在類級別定義的,而不是在構(gòu)造方法__init__()方法內(nèi)部定義的。與實(shí)例屬性不同,使用類的名稱訪問類屬性:

  1. >>> class Cat: 
  2. ...     name = 'Mimi' 
  3. ... 

上述Cat類包括一個(gè)名為name的類屬性,可以使用類名稱訪問該屬性:

  1. >>> Cat.name 
  2. 'Mimi' 

Cat類的每個(gè)實(shí)例都可以使用點(diǎn)表示法訪問該屬性:

  1. >>> mimi = Cat() 
  2. >>> miaomiao = Cat() 
  3. >>> mimi.name 
  4. 'Mimi' 
  5. >>> miaomiao.name   # mimi和miaomiao的name都為'Mimi' 
  6. 'Mimi' 

但是,改變某個(gè)實(shí)例的類屬性不會(huì)影響其他實(shí)例,它只會(huì)影響當(dāng)前實(shí)例:

  1. >> class Cat: 
  2. ...     name = 'Mimi' 
  3. ... 
  4. >>> mimi = Cat() 
  5. >>> mimi.name 
  6. 'Mimi' 
  7. >>> mimi.name = 'MIMI'   # 將mimi的name屬性改為大寫 
  8. >>> mimi.name 
  9. 'MIMI' 
  10. >>> Cat.name   # Cat類的name屬性并沒有改變 
  11. 'Mimi' 
  12. >>> miaomiao = Cat()   # 新實(shí)例化一個(gè)實(shí)例 
  13. >>> miaomiao.name   # 新實(shí)例的name并沒有受到前一個(gè)實(shí)例影響 
  14. 'Mimi' 

2、實(shí)例方法

可以使用def關(guān)鍵字在類中定義任意數(shù)量的方法。方法的第一個(gè)參數(shù)通常為self,它用來引用和調(diào)用實(shí)例。在類中定義方法和定義普通的函數(shù)沒有太多區(qū)別。下面在Cat類中定義了一個(gè)名為eat的方法:

  1. >>> class Cat: 
  2. ...     def __init__(self, name, age): 
  3. ...         self.name = name 
  4. ...         self.age = age 
  5. ...     def eat(self): 
  6. ...         print('{1}歲的{0}正在進(jìn)食'.format(self.name, self.age)) 
  7. ... 

可以使用實(shí)例調(diào)用類的實(shí)例方法:

  1. >>> mimi = Cat('Mimi'1
  2. >>> mimi.eat() 
  3. 1歲的Mimi正在進(jìn)食 

【Python基礎(chǔ)知識】Python類的類屬性、實(shí)例方法和類方法

3、類方法

類方法是將類本身作為對象進(jìn)行操作的方法,也就是說,類方法調(diào)用的是類變量和類方法。類方法的語法格式如下:

@classmethod

def 方法名(cls[,參數(shù)]):

方法體

類方法使用@classmethod裝飾,第一個(gè)參數(shù)為cls隱含參數(shù),其余參數(shù)是可選的。下面給出兩個(gè)簡單的類方法的示例,第一個(gè)示例是創(chuàng)建只含有默認(rèn)參數(shù)的類方法:

  1. @classmethod 
  2. def cfun(cls): 
  3.     print('成功進(jìn)入類方法'

第二個(gè)示例是創(chuàng)建含有其余參數(shù)的類方法:

  1. @classmethod 
  2. def cfun(cls, name): 
  3.     cls.name = name 
  4. print('成功進(jìn)入類方法'

調(diào)用類方法有兩種方式,一種是類外調(diào)用,采用“類名.方法名(參數(shù))”的形式;另一種是類內(nèi)調(diào)用,采用“cls.方法名(參數(shù))”的形式:

  1. >>> class play_game(object): 
  2. ...     top_score = 100 
  3. ...     @classmethod 
  4. ...     def look_again(cls): 
  5. ...         print('再次查看最高分?jǐn)?shù):%d' % cls.top_score) 
  6. ...     @classmethod 
  7. ...     def look_socre(cls): 
  8. ...         print('最高分?jǐn)?shù):%d' % cls.top_score) 
  9. ...         cls.look_again()   # 類內(nèi)調(diào)用 
  10. ... 
  11. >>> play_game.look_socre()   # 類外調(diào)用 
  12. 最高分?jǐn)?shù):100 
  13. 再次查看最高分?jǐn)?shù):100 

上述程序中,在類外采用“類名.方法名(參數(shù))”的形式調(diào)用了類方法look_socre()。look_socre()類方法用@classmethod進(jìn)行了裝飾,并且內(nèi)部調(diào)用了類屬性top_score,打印最高分?jǐn)?shù);然后在類內(nèi)采用“cls.方法名(參數(shù))”的形式調(diào)用了另一個(gè)類方法look_again()。look_again()類方法的的功能是再次打印最高分?jǐn)?shù)。因此,執(zhí)行類調(diào)用代碼后,先執(zhí)行l(wèi)ook_socre()類方法中的打印語句,后執(zhí)行l(wèi)ook_again()類方法中的打印語句。

例如,創(chuàng)建一個(gè)學(xué)生類(Student),類屬性city的默認(rèn)值為'北京';在類中創(chuàng)建一個(gè)類方法get_city(),該類方法的功能是打印類屬性。利用類方法set_city()修改城市,代碼如下:

  1. >>> class Student: 
  2. ...     city = '北京' 
  3. ...     @classmethod 
  4. ...     def get_city(cls): 
  5. ...         print('城市:'cls.city) 
  6. ...     @classmethod 
  7. ...     def set_city(cls, cty): 
  8. ...         cls.city = cty 
  9. ... 
  10. >>> Student.get_city() 
  11. 城市: 北京 
  12. >>> Student.set_city('上海'
  13. >>> Student.get_city() 
  14. 城市: 上海 

下面比較一下類方法與實(shí)例方法的相同點(diǎn)和不同點(diǎn)。

類方法與實(shí)例方法的相同點(diǎn)如下:

①都可以在類內(nèi)調(diào)用。

②都可以通過實(shí)例調(diào)用。

類方法與實(shí)例方法的不同點(diǎn)如下:

①類方法第一個(gè)默認(rèn)參數(shù)為cls;實(shí)例方法第一個(gè)默認(rèn)參數(shù)為self。

②類方法可以通過類名直接調(diào)用。

③類方法內(nèi)只能調(diào)用類屬性和類方法。

類方法的作用如下:

①方便類直接調(diào)用。

②可以修改類屬性和類方法。

③減少創(chuàng)建多個(gè)實(shí)例時(shí)所占用的內(nèi)存空間,加快運(yùn)行速度。

文章“【Python基礎(chǔ)知識】Python類的類屬性、實(shí)例方法和類方法”已幫助

>>本文地址:http://hqfphsz.com/zhuanye/2021/66400.html

THE END  

聲明:本站稿件版權(quán)均屬中公教育優(yōu)就業(yè)所有,未經(jīng)許可不得擅自轉(zhuǎn)載。

1 您的年齡

2 您的學(xué)歷

3 您更想做哪個(gè)方向的工作?

獲取測試結(jié)果
  • 大前端大前端
  • 大數(shù)據(jù)大數(shù)據(jù)
  • 互聯(lián)網(wǎng)營銷互聯(lián)網(wǎng)營銷
  • JavaJava
  • Linux云計(jì)算Linux
  • Python+人工智能Python
  • 嵌入式物聯(lián)網(wǎng)嵌入式
  • 全域電商運(yùn)營全域電商運(yùn)營
  • 軟件測試軟件測試
  • 室內(nèi)設(shè)計(jì)室內(nèi)設(shè)計(jì)
  • 平面設(shè)計(jì)平面設(shè)計(jì)
  • 電商設(shè)計(jì)電商設(shè)計(jì)
  • 網(wǎng)頁設(shè)計(jì)網(wǎng)頁設(shè)計(jì)
  • 全鏈路UI/UE設(shè)計(jì)UI設(shè)計(jì)
  • VR/AR游戲開發(fā)VR/AR
  • 網(wǎng)絡(luò)安全網(wǎng)絡(luò)安全
  • 新媒體與短視頻運(yùn)營新媒體
  • 直播帶貨直播帶貨
  • 智能機(jī)器人軟件開發(fā)智能機(jī)器人
 

快速通道fast track

近期開班時(shí)間TIME