IT培訓(xùn)網(wǎng)
IT在線學(xué)習(xí)
1、類屬性
類屬性與實(shí)例屬性不同。一個(gè)類的所有實(shí)例的值都相同的屬性稱為類屬性。所有實(shí)例都共享類屬性的值。類屬性是在類級(jí)別定義的,而不是在構(gòu)造方法__init__()方法內(nèi)部定義的。與實(shí)例屬性不同,使用類的名稱訪問類屬性:
- >>> class Cat:
- ... name = 'Mimi'
- ...
上述Cat類包括一個(gè)名為name的類屬性,可以使用類名稱訪問該屬性:
- >>> Cat.name
- 'Mimi'
Cat類的每個(gè)實(shí)例都可以使用點(diǎn)表示法訪問該屬性:
- >>> mimi = Cat()
- >>> miaomiao = Cat()
- >>> mimi.name
- 'Mimi'
- >>> miaomiao.name # mimi和miaomiao的name都為'Mimi'
- 'Mimi'
但是,改變某個(gè)實(shí)例的類屬性不會(huì)影響其他實(shí)例,它只會(huì)影響當(dāng)前實(shí)例:
- >> class Cat:
- ... name = 'Mimi'
- ...
- >>> mimi = Cat()
- >>> mimi.name
- 'Mimi'
- >>> mimi.name = 'MIMI' # 將mimi的name屬性改為大寫
- >>> mimi.name
- 'MIMI'
- >>> Cat.name # Cat類的name屬性并沒有改變
- 'Mimi'
- >>> miaomiao = Cat() # 新實(shí)例化一個(gè)實(shí)例
- >>> miaomiao.name # 新實(shí)例的name并沒有受到前一個(gè)實(shí)例影響
- 'Mimi'
2、實(shí)例方法
可以使用def關(guān)鍵字在類中定義任意數(shù)量的方法。方法的第一個(gè)參數(shù)通常為self,它用來引用和調(diào)用實(shí)例。在類中定義方法和定義普通的函數(shù)沒有太多區(qū)別。下面在Cat類中定義了一個(gè)名為eat的方法:
- >>> class Cat:
- ... def __init__(self, name, age):
- ... self.name = name
- ... self.age = age
- ... def eat(self):
- ... print('{1}歲的{0}正在進(jìn)食'.format(self.name, self.age))
- ...
可以使用實(shí)例調(diào)用類的實(shí)例方法:
- >>> mimi = Cat('Mimi', 1)
- >>> mimi.eat()
- 1歲的Mimi正在進(jìn)食
3、類方法
類方法是將類本身作為對(duì)象進(jìn)行操作的方法,也就是說,類方法調(diào)用的是類變量和類方法。類方法的語(yǔ)法格式如下:
@classmethod
def 方法名(cls[,參數(shù)]):
方法體
類方法使用@classmethod裝飾,第一個(gè)參數(shù)為cls隱含參數(shù),其余參數(shù)是可選的。下面給出兩個(gè)簡(jiǎn)單的類方法的示例,第一個(gè)示例是創(chuàng)建只含有默認(rèn)參數(shù)的類方法:
- @classmethod
- def cfun(cls):
- print('成功進(jìn)入類方法')
第二個(gè)示例是創(chuàng)建含有其余參數(shù)的類方法:
- @classmethod
- def cfun(cls, name):
- cls.name = name
- print('成功進(jìn)入類方法')
調(diào)用類方法有兩種方式,一種是類外調(diào)用,采用“類名.方法名(參數(shù))”的形式;另一種是類內(nèi)調(diào)用,采用“cls.方法名(參數(shù))”的形式:
- >>> class play_game(object):
- ... top_score = 100
- ... @classmethod
- ... def look_again(cls):
- ... print('再次查看最高分?jǐn)?shù):%d' % cls.top_score)
- ... @classmethod
- ... def look_socre(cls):
- ... print('最高分?jǐn)?shù):%d' % cls.top_score)
- ... cls.look_again() # 類內(nèi)調(diào)用
- ...
- >>> play_game.look_socre() # 類外調(diào)用
- 最高分?jǐn)?shù):100
- 再次查看最高分?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()類方法中的打印語(yǔ)句,后執(zhí)行l(wèi)ook_again()類方法中的打印語(yǔ)句。
例如,創(chuàng)建一個(gè)學(xué)生類(Student),類屬性city的默認(rèn)值為'北京';在類中創(chuàng)建一個(gè)類方法get_city(),該類方法的功能是打印類屬性。利用類方法set_city()修改城市,代碼如下:
- >>> class Student:
- ... city = '北京'
- ... @classmethod
- ... def get_city(cls):
- ... print('城市:', cls.city)
- ... @classmethod
- ... def set_city(cls, cty):
- ... cls.city = cty
- ...
- >>> Student.get_city()
- 城市: 北京
- >>> Student.set_city('上海')
- >>> Student.get_city()
- 城市: 上海
下面比較一下類方法與實(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)行速度。
>>本文地址:http://www.yceu.cn/zhuanye/2021/66400.html
聲明:本站稿件版權(quán)均屬中公教育優(yōu)就業(yè)所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
1 您的年齡
2 您的學(xué)歷
3 您更想做哪個(gè)方向的工作?