1、類屬性
類屬性與實例屬性不同。一個類的所有實例的值都相同的屬性稱為類屬性。所有實例都共享類屬性的值。類屬性是在類級別定義的,而不是在構造方法__init__()方法內部定義的。與實例屬性不同,使用類的名稱訪問類屬性:
- >>> class Cat:
- ... name = 'Mimi'
- ...
上述Cat類包括一個名為name的類屬性,可以使用類名稱訪問該屬性:
- >>> Cat.name
- 'Mimi'
Cat類的每個實例都可以使用點表示法訪問該屬性:
- >>> mimi = Cat()
- >>> miaomiao = Cat()
- >>> mimi.name
- 'Mimi'
- >>> miaomiao.name # mimi和miaomiao的name都為'Mimi'
- 'Mimi'
但是,改變某個實例的類屬性不會影響其他實例,它只會影響當前實例:
- >> class Cat:
- ... name = 'Mimi'
- ...
- >>> mimi = Cat()
- >>> mimi.name
- 'Mimi'
- >>> mimi.name = 'MIMI' # 將mimi的name屬性改為大寫
- >>> mimi.name
- 'MIMI'
- >>> Cat.name # Cat類的name屬性并沒有改變
- 'Mimi'
- >>> miaomiao = Cat() # 新實例化一個實例
- >>> miaomiao.name # 新實例的name并沒有受到前一個實例影響
- 'Mimi'
2、實例方法
可以使用def關鍵字在類中定義任意數量的方法。方法的第一個參數通常為self,它用來引用和調用實例。在類中定義方法和定義普通的函數沒有太多區別。下面在Cat類中定義了一個名為eat的方法:
- >>> class Cat:
- ... def __init__(self, name, age):
- ... self.name = name
- ... self.age = age
- ... def eat(self):
- ... print('{1}歲的{0}正在進食'.format(self.name, self.age))
- ...
可以使用實例調用類的實例方法:
- >>> mimi = Cat('Mimi', 1)
- >>> mimi.eat()
- 1歲的Mimi正在進食
3、類方法
類方法是將類本身作為對象進行操作的方法,也就是說,類方法調用的是類變量和類方法。類方法的語法格式如下:
@classmethod
def 方法名(cls[,參數]):
方法體
類方法使用@classmethod裝飾,第一個參數為cls隱含參數,其余參數是可選的。下面給出兩個簡單的類方法的示例,第一個示例是創建只含有默認參數的類方法:
- @classmethod
- def cfun(cls):
- print('成功進入類方法')
第二個示例是創建含有其余參數的類方法:
- @classmethod
- def cfun(cls, name):
- cls.name = name
- print('成功進入類方法')
調用類方法有兩種方式,一種是類外調用,采用“類名.方法名(參數)”的形式;另一種是類內調用,采用“cls.方法名(參數)”的形式:
- >>> class play_game(object):
- ... top_score = 100
- ... @classmethod
- ... def look_again(cls):
- ... print('再次查看最高分數:%d' % cls.top_score)
- ... @classmethod
- ... def look_socre(cls):
- ... print('最高分數:%d' % cls.top_score)
- ... cls.look_again() # 類內調用
- ...
- >>> play_game.look_socre() # 類外調用
- 最高分數:100
- 再次查看最高分數:100
上述程序中,在類外采用“類名.方法名(參數)”的形式調用了類方法look_socre()。look_socre()類方法用@classmethod進行了裝飾,并且內部調用了類屬性top_score,打印最高分數;然后在類內采用“cls.方法名(參數)”的形式調用了另一個類方法look_again()。look_again()類方法的的功能是再次打印最高分數。因此,執行類調用代碼后,先執行look_socre()類方法中的打印語句,后執行look_again()類方法中的打印語句。
例如,創建一個學生類(Student),類屬性city的默認值為'北京';在類中創建一個類方法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()
- 城市: 上海
下面比較一下類方法與實例方法的相同點和不同點。
類方法與實例方法的相同點如下:
①都可以在類內調用。
②都可以通過實例調用。
類方法與實例方法的不同點如下:
①類方法第一個默認參數為cls;實例方法第一個默認參數為self。
②類方法可以通過類名直接調用。
③類方法內只能調用類屬性和類方法。
類方法的作用如下:
①方便類直接調用。
②可以修改類屬性和類方法。
③減少創建多個實例時所占用的內存空間,加快運行速度。
>>本文地址:http://www.jecan.cn/zhuanye/2021/66400.html
聲明:本站稿件版權均屬中公教育優就業所有,未經許可不得擅自轉載。
1 您的年齡
2 您的學歷
3 您更想做哪個方向的工作?