Python 的對(duì)象和類
在編程領(lǐng)域中,通常把現(xiàn)實(shí)世界中的實(shí)體稱為對(duì)象,例如:
- 美國(guó)總統(tǒng)特朗普
- 中國(guó)明星成龍
- 上海中心大廈
- 北京中信大廈
這里需要注意的是,對(duì)象指的是一個(gè)具體的實(shí)體,不用于指代一個(gè)抽象的群體。例如:特朗普是一個(gè)特定的具體的人,可以說 “特朗普是一個(gè)對(duì)象”。他是一個(gè)美國(guó)人,因?yàn)槊绹?guó)人是一個(gè)抽象的概念,指代的是一類人,因此不能說 “美國(guó)人是一個(gè)對(duì)象”。
類似的,上海中心大廈、北京中信大廈這些具體的大廈可以被稱為對(duì)象,但是不使用 “大廈是一個(gè)對(duì)象” 這樣的說法。
1. 對(duì)象的屬性和行為
現(xiàn)實(shí)世界中的實(shí)體有屬性和行為,下面的表格列舉了特朗普和成龍的屬性和行為:
對(duì)象 | 屬性 | 行為 |
---|---|---|
特朗普 | 姓名、年齡 | 自我介紹 |
成龍 | 姓名、年齡 | 自我介紹 |
行為又被稱為方法,它是對(duì)屬性的操作,包括讀取操作和修改操作。例如,在特朗普的自我介紹行為中,會(huì)讀取他的屬性:姓名和年齡。
2. Python 中的對(duì)象
2.1 對(duì)象的例子
在 Python 中,對(duì)象的例子如下:
- 字符串 ‘Hello’
- 列表 [‘www’, ‘imooc’, ‘com’]
- 元組 (‘www’, ‘imooc’, ‘com’)
- 字典 {‘name’: ‘tom’, ‘a(chǎn)ge’: 123}
2.2 對(duì)象的屬性
對(duì)象的屬性示例如下:
>>> string = 'Hello'
>>> print(string.__doc__)
str(object='') -> str
str(bytes_or_buffer[, encoding[, errors]]) -> str
Create a new string object from the given object.
>>> list = ['a', 'b', 'c']
>>> print(list.__doc__)
list() -> new empty list
list(iterable) -> new list initialized from iterable's items
- 在第 1 行,創(chuàng)建字符串對(duì)象 ‘Hello’
- 在第 2 行,打印字符串 ‘Hello’ 的屬性 __doc__,該屬性描述了字符串對(duì)象的用法
- 在第 6 行,創(chuàng)建列表對(duì)象 list
- 在第 7 行,打印列表 list 的屬性 __doc__,該屬性描述了列表對(duì)象的用法
2.3 對(duì)象的行為
對(duì)象的行為示例如下:
>>> string = 'Hello'
>>> string.upper()
'HELLO'
>>> list = ['a', 'b', 'c']
>>> list.append('d')
>>> list
['a', 'b', 'c', 'd']
- 在第 1 行,創(chuàng)建字符串對(duì)象 ‘Hello’
- 在第 2 行,調(diào)用對(duì)象的 upper 方法,獲取字符串的大寫
- 在第 4 行,創(chuàng)建列表對(duì)象 list
- 在第 5 行,調(diào)用對(duì)象的 append 方法,向列表追加一個(gè)元素
3. 什么是類
3.1 類的定義
在現(xiàn)實(shí)世界中,具體的實(shí)體被稱為對(duì)象,觀察這些對(duì)象的屬性和行為,發(fā)現(xiàn)可以使用相同的特征去描述一類對(duì)象。例如:
對(duì)象 | 屬性和行為 |
---|---|
美國(guó)總統(tǒng)特朗普 | 姓名、年齡、工作 |
中國(guó)明星成龍 | 姓名、年齡、工作 |
上海中心大廈 | 高度、業(yè)主、維護(hù) |
北京中信大廈 | 高度、業(yè)主、維護(hù) |
可以使用 “姓名、年齡、工作” 等特征去描述特朗普和成龍這一類對(duì)象,使用 “高度、業(yè)主、維護(hù)” 等特征去描述上海中心大廈、北京中信大廈這一類對(duì)象。
在編程領(lǐng)域,類是對(duì)一組具有相同屬性和行為的對(duì)象的抽象。例如, “人” 是一個(gè)抽象的概念,它是一個(gè)類或者類別,描述了具有 “姓名、年齡、工作” 等特征的一組對(duì)象;“樓” 是一個(gè)抽象的概念,它是一個(gè)類或者類別,描述了具有 “高度、業(yè)主、維護(hù)” 等特征的一組對(duì)象。
3.2 類和對(duì)象的關(guān)系和區(qū)別
下面的列表總結(jié)了類和對(duì)象的關(guān)系和區(qū)別:
- 對(duì)象是一個(gè)具體的實(shí)體,例如:特朗普是一個(gè)對(duì)象
- 類是對(duì)多個(gè)具有相同屬性的實(shí)體的抽象,例如:特朗普和成龍等實(shí)體具有 “姓名、年齡、工作” 等屬性,通過歸納形成一個(gè)抽象概念——人,人是一個(gè)類
- 對(duì)象與類的關(guān)系:對(duì)象屬于某個(gè)類、對(duì)象不屬于某個(gè)類,例如:特朗普是一個(gè)人,或者說特朗普屬于人類
4. Python 中的類
本節(jié)講解如何在 Python 中創(chuàng)建類,并利用類來創(chuàng)建對(duì)象。首先創(chuàng)建一個(gè)具有 name 和 age 兩個(gè)屬性的類——Person,然后利用 Person 這個(gè)類創(chuàng)建兩個(gè)對(duì)象—— tom 和 jerry,代碼如下:
class Person:
def introduce(self):
print('My name is %s, I am %d years old' % (self.name, self.age))
tom = Person()
tom.name = 'tom'
tom.age = 10
jerry = Person()
jerry.name = 'jerry'
jerry.age = 20
tom.introduce()
jerry.introduce()
- 在第 1 行,使用 class 關(guān)鍵字創(chuàng)建類 Person,類 Person 是對(duì)具有 name 和 age 屬性的對(duì)象的抽象
- 在第 2 行,定義了 Person 的方法 introduce,introduce 方法描述了類 Person 的行為
- 在第 3 行,類 Person 的 introduce 方法輸出 Person 的屬性 name 和 age
- 參數(shù) self 指向當(dāng)前的對(duì)象
- 注意,本節(jié)講解對(duì)象和類的區(qū)別,在詞條 “Python 類屬性和實(shí)例屬性” 詳細(xì)介紹 self 參數(shù)
- 在第 5 行,根據(jù)類 Person 創(chuàng)建一個(gè)新的對(duì)象 tom
- 在第 6 行,設(shè)置對(duì)象 tom 的 name 屬性為 ‘tom’
- 在第 7 行,設(shè)置對(duì)象 tom 的 age 屬性為 10
- 在第 9 行,根據(jù)類 Person 創(chuàng)建一個(gè)新的對(duì)象 jerry
- 在第 10 行,設(shè)置對(duì)象 jerry 的 name 屬性為 ‘jerry’
- 在第 11 行,設(shè)置對(duì)象 jerry 的 age 屬性為 20
- 在第 13 行,調(diào)用對(duì)象 tom 的 introduce 方法
- 在第 14 行,調(diào)用對(duì)象 jerry 的 introduce 方法
程序運(yùn)行,輸出結(jié)果如下:
My name is tom, I am 10 years old
My name is jerry, I am 20 years old
總結(jié),在上面的例子中,類和對(duì)象分別是:
- Person 是一個(gè)類
- tom 是一個(gè)對(duì)象
- jerry 是一個(gè)對(duì)象
5. 小結(jié)
對(duì)象和類的概念比較抽象,同學(xué)們可以把生活中的一些場(chǎng)景做一下代入。對(duì)象和類的是進(jìn)行面向?qū)ο箝_發(fā)的基礎(chǔ),所以一定要好好掌握對(duì)象和類的概念,下個(gè)小節(jié)我們來學(xué)習(xí)下類屬性和實(shí)例屬性。