【Python使用】嘿馬python基礎(chǔ)入門全體系教程第12篇:類和對象,添加和獲取對象的屬性【附代碼文檔】

??????教程全知識(shí)點(diǎn)簡介:1.Python函數(shù)高級特性包括匿名函數(shù)(lambda語法格式、與普通函數(shù)區(qū)別、應(yīng)用場景、參數(shù)形式)。2. 文件操作涵蓋文件打開關(guān)閉、文件讀寫(write寫數(shù)據(jù)、readlines讀數(shù)據(jù))。3. 面向?qū)ο缶幊贪惡蛯ο螅惗x、對象創(chuàng)建、類對象關(guān)系)、類構(gòu)成、self關(guān)鍵字、對象屬性操作、構(gòu)造方法init、字符串方法str、多繼承、子類重寫、多態(tài)概念及應(yīng)用、類屬性和實(shí)例屬性、靜態(tài)方法和類方法。4. 異常處理涵蓋異常傳遞(try嵌套、函數(shù)嵌套調(diào)用)、自定義異常拋出。5. 模塊系統(tǒng)包括Python模塊概念、import導(dǎo)入機(jī)制、學(xué)生管理系統(tǒng)應(yīng)用。6. 計(jì)算機(jī)基礎(chǔ)涉及計(jì)算機(jī)組成、硬件系統(tǒng)、程序處理機(jī)制、編程語言概念、Python介紹、解釋器作用。7. Python語法基礎(chǔ)包括注釋分類、輸出(格式化輸出、轉(zhuǎn)義字符、結(jié)束符)、輸入語法、數(shù)據(jù)類型轉(zhuǎn)換、運(yùn)算符(算數(shù)運(yùn)算符)。8. 控制流程涵蓋判斷語句(if語句、if-else、if-elif-else、三目運(yùn)算、if嵌套)、循環(huán)語句(while循環(huán)、for循環(huán)、break和continue)。9. 數(shù)據(jù)容器包括字符串操作(rfind、partition、splitlines、isalpha、isdigit)、列表(列表格式、相關(guān)操作、循環(huán)遍歷、嵌套)、元組、字典(鍵值訪問)、公共方法、容器類型轉(zhuǎn)換、推導(dǎo)式(列表推導(dǎo)式、多for循環(huán))。10. 函數(shù)進(jìn)階涵蓋函數(shù)返回值、函數(shù)文檔說明、函數(shù)嵌套調(diào)用、變量作用域(局部變量、全局變量、global關(guān)鍵字)、拆包和變量交換、引用概念、可變不可變類型、函數(shù)使用注意事項(xiàng)


??????????本站這篇博客:???http://www.itdecent.cn/p/728ca1791195 ???中查看

??????????本站這篇博客:???http://www.itdecent.cn/p/728ca1791195 ???中查看

??????????本站這篇博客:???http://www.itdecent.cn/p/728ca1791195 ???中查看

? 本教程項(xiàng)目亮點(diǎn)

?? 知識(shí)體系完整:覆蓋從基礎(chǔ)原理、核心方法到高階應(yīng)用的全流程內(nèi)容
?? 全技術(shù)鏈覆蓋:完整前后端技術(shù)棧,涵蓋開發(fā)必備技能
?? 從零到實(shí)戰(zhàn):適合 0 基礎(chǔ)入門到提升,循序漸進(jìn)掌握核心能力
?? 豐富文檔與代碼示例:涵蓋多種場景,可運(yùn)行、可復(fù)用
?? 工作與學(xué)習(xí)雙參考:不僅適合系統(tǒng)化學(xué)習(xí),更可作為日常開發(fā)中的查閱手冊
?? 模塊化知識(shí)結(jié)構(gòu):按知識(shí)點(diǎn)分章節(jié),便于快速定位和復(fù)習(xí)
?? 長期可用的技術(shù)積累:不止一次學(xué)習(xí),而是能伴隨工作與項(xiàng)目長期參考


??????全教程總章節(jié)


??????本篇主要內(nèi)容

類和對象

面向?qū)ο缶幊痰?個(gè)非常重要的概念:類和對象

對象是面向?qū)ο缶幊痰暮诵?,在使用對象的過程中,為了將具有共同特征和行為的一組對象抽象定義,提出了另外一個(gè)新的概念——類

1. 類

學(xué)習(xí)編程語言,就是為了模擬現(xiàn)實(shí)世界中的事物,實(shí)現(xiàn)信息化來提高工作效率。例如銀行的業(yè)務(wù)系統(tǒng)、超市的結(jié)賬系統(tǒng)等,都是如此。

面向?qū)ο蟮恼Z言當(dāng)中,“類”就是用來模擬現(xiàn)實(shí)事物的。

那么模擬現(xiàn)實(shí)世界的事物通常從兩方面模擬:

  1. 屬性:事物的特征描述信息,用于描述某個(gè)特征“是什么”。 靜
  2. 行為:事物的能力行動(dòng)方案,用于說明事物“能做什么”。

類中也有屬性、行為兩個(gè)組成部分,而“對象”是類的具體實(shí)例。例如:

  1. :抽象的,是一張“手機(jī)設(shè)計(jì)圖”。
  2. 對象:具體的,是一個(gè)“真正的手機(jī)實(shí)例”。

類就相當(dāng)于制造飛機(jī)時(shí)的圖紙,用它來進(jìn)行創(chuàng)建的飛機(jī)就相當(dāng)于對象

人以類聚 物以群分。
具有相似內(nèi)部狀態(tài)和運(yùn)動(dòng)規(guī)律的實(shí)體的集合(或統(tǒng)稱為抽象)。 
具有相同屬性和行為事物的統(tǒng)稱

類是抽象的,在使用的時(shí)候通常會(huì)找到這個(gè)類的一個(gè)具體的存在,使用這個(gè)具體的存在。一個(gè)類可以找到多個(gè)對象

2. 對象

某一個(gè)具體事物的存在 ,在現(xiàn)實(shí)世界中可以是看得見摸得著的。

可以是直接使用的

3. 類和對象之間的關(guān)系

小總結(jié):類就是創(chuàng)建對象的模板

4. 練習(xí):區(qū)分類和對象

奔馳汽車 類
奔馳smart 類 
張三的那輛奔馳smart 對象
狗 類
大黃狗 類 
李四家那只大黃狗 對象 
水果 類
蘋果 類 
紅蘋果 類 紅富士蘋果 類 
我嘴里吃了一半的蘋果 對象

5. 類的構(gòu)成

類(Class) 由3個(gè)部分構(gòu)成

  • 類的名稱:類名
  • 類的屬性:一組數(shù)據(jù)
  • 類的方法:允許對進(jìn)行操作的方法 (行為)

<1> 舉例:1>

1)人類設(shè)計(jì),只關(guān)心3樣?xùn)|西:

  • 事物名稱(類名):人(Person)
  • 屬性:身高(height)、年齡(age)
  • 方法(行為/功能):跑(run)、打架(fight)

2)狗類的設(shè)計(jì)

  • 類名:狗(Dog)
  • 屬性:品種 、毛色、性別、名字、 腿兒的數(shù)量
  • 方法(行為/功能):叫 、跑、咬人、吃、搖尾巴

6. 類的抽象

如何把日常生活中的事物抽象成程序中的類?

擁有相同(或者類似)屬性和行為的對象都可以抽像出一個(gè)類

方法:一般名詞都是類(名詞提煉法)

<1> 坦克發(fā)射3顆炮彈轟掉了2架飛機(jī)1>

  • 坦克--》可以抽象成 類
  • 炮彈--》可以抽象成類
  • 飛機(jī)-》可以抽象成類

<2> 小明在公車上牽著一條叼著熱狗的狗2>

  • 小明--》 人類
  • 公車--》 交通工具類
  • 熱狗--》 食物類
  • 狗--》 狗類

<3>【想一想】如下圖中,有哪些類呢?3>

說明:

  • 子彈
  • 手榴彈
  • 刀子
  • 箱子

<4>【想一想】如下圖中,有哪些類呢?4>

說明:

  • 向日葵

    • 類名: xrk
    • 屬性:
    • 行為: 放陽光
  • 豌豆

    • 類名: wd
    • 屬性: 顏色 、發(fā)型,血量
    • 行為:發(fā)炮, 搖頭
  • 堅(jiān)果:

    • 類名:jg
    • 屬性:血量 類型
    • 行為:阻擋;
  • 僵尸:

    • 類名:js
    • 屬性:顏色、血量、 類型、速度
    • 行為:走 跑跳 吃 死

定義類

定義一個(gè)類,格式如下:

class 類名:
    方法列表

demo:定義一個(gè)Hero類

  
  
# class Hero:  # 經(jīng)典類(舊式類)定義形式
  
  
  
  
# class Hero():
  
  

class Hero(object):  # 新式類定義形式
    def info(self):
        print("英雄各有見,何必問出處。")

Python 教程

schedule 文檔

說明:

  • 定義類時(shí)有2種形式:新式類和經(jīng)典類,上面代碼中的Hero為新式類,前兩行注釋部分則為經(jīng)典類;

  • object 是Python 里所有類的最頂級父類;

  • 類名 的命名規(guī)則按照"大駝峰命名法";

  • info 是一個(gè)實(shí)例方法,第一個(gè)參數(shù)一般是self,表示實(shí)例對象本身,當(dāng)然了可以將self換為其它的名字,其作用是一個(gè)變量 這個(gè)變量指向了實(shí)例對象

創(chuàng)建對象

python中,可以根據(jù)已經(jīng)定義的類去創(chuàng)建出一個(gè)或多個(gè)對象。

創(chuàng)建對象的格式為:

對象名1 = 類名()
對象名2 = 類名()
對象名3 = 類名()

創(chuàng)建對象demo:

class Hero(object):  # 新式類定義形式
    """info 是一個(gè)實(shí)例方法,類對象可以調(diào)用實(shí)例方法,實(shí)例方法的第一個(gè)參數(shù)一定是self"""
    def info(self):
        """當(dāng)對象調(diào)用實(shí)例方法時(shí),Python會(huì)自動(dòng)將對象本身的引用做為參數(shù),
            傳遞到實(shí)例方法的第一個(gè)參數(shù)self里"""
        print(self) 
        print("self各不同,對象是出處。")


  
  
# Hero這個(gè)類 實(shí)例化了一個(gè)對象  taidamier(泰達(dá)米爾)
  
  
taidamier = Hero()

  
  
# 對象調(diào)用實(shí)例方法info(),執(zhí)行info()里的代碼
  
  
  
  
# . 表示選擇屬性或者方法
  
  
taidamier.info()

print(taidamier)  # 打印對象,則默認(rèn)打印對象在內(nèi)存的地址,結(jié)果等同于info里的print(self)
print(id(taidamier))  # id(taidamier) 則是內(nèi)存地址的十進(jìn)制形式表示

說明:

  • 當(dāng)創(chuàng)建一個(gè)對象時(shí),就是用一個(gè)模子,來制造一個(gè)實(shí)物

self

self指的是調(diào)用該函數(shù)的對象。

  
  
# 1. 定義類
  
  
class Washer():
    def wash(self):
        print('我會(huì)洗衣服')
        # <__main__.Washer object at 0x0000024BA2B34240>
        print(self)


  
  
# 2. 創(chuàng)建對象
  
  
haier1 = Washer()
  
  
# <__main__.Washer object at 0x0000018B7B224240>
  
  
print(haier1)
  
  
# haier1對象調(diào)用實(shí)例方法
  
  
haier1.wash()


haier2 = Washer()
  
  
# <__main__.Washer object at 0x0000022005857EF0>
  
  
print(haier2)

注意:打印對象和self得到的結(jié)果是一致的,都是當(dāng)前對象的內(nèi)存中存儲(chǔ)地址。

問題:

對象既然有實(shí)例方法,是否也可以有自己的屬性?

添加和獲取對象的屬性

屬性即是特征.

對象屬性既可以在類外面添加和獲取,也能在類里面添加和獲取。

class Hero(object):
    """定義了一個(gè)英雄類,可以移動(dòng)和"""
    def move(self):
        """實(shí)例方法"""
        print("正在前往事發(fā)地點(diǎn)...")

    def attack(self):
        """實(shí)例方法"""
        print("發(fā)出了一招強(qiáng)力的普通...")

  
  
# 實(shí)例化了一個(gè)英雄對象 泰達(dá)米爾
  
  
taidamier = Hero()

  
  
# 給對象添加屬性,以及對應(yīng)的屬性值
  
  
taidamier.name = "泰達(dá)米爾"  # 姓名
taidamier.hp = 2600  # 生命值
taidamier.atk = 450  # 力
taidamier.armor = 200  # 護(hù)甲值

  
  
# 通過.成員選擇運(yùn)算符,獲取對象的屬性值
  
  
print("英雄 %s 的生命值 :%d" % (taidamier.name, taidamier.hp))
print("英雄 %s 的力 :%d" % (taidamier.name, taidamier.atk))
print("英雄 %s 的護(hù)甲值 :%d" % (taidamier.name, taidamier.armor))

  
  
# 通過.成員選擇運(yùn)算符,獲取對象的實(shí)例方法
  
  
taidamier.move()
taidamier.attack()

Starlette 文檔

tqdm 文檔

問題:

對象創(chuàng)建并添加屬性后,能否在類的實(shí)例方法里獲取這些屬性呢?如果可以的話,應(yīng)該通過什么方式?

在方法內(nèi)通過self獲取對象屬性

class Hero(object):
    """定義了一個(gè)英雄類,可以移動(dòng)和"""
    def move(self):
        """實(shí)例方法"""
        print("正在前往事發(fā)地點(diǎn)...")

    def attack(self):
        """實(shí)例方法"""
        print("發(fā)出了一招強(qiáng)力的普通...")

    def info(self):
        """在類的實(shí)例方法中,通過self獲取該對象的屬性"""
        print("英雄 %s 的生命值 :%d" % (self.name, self.hp))
        print("英雄 %s 的力 :%d" % (self.name, self.atk))
        print("英雄 %s 的護(hù)甲值 :%d" % (self.name, self.armor))


  
  
# 實(shí)例化了一個(gè)英雄對象 泰達(dá)米爾
  
  
taidamier = Hero()

  
  
# 給對象添加屬性,以及對應(yīng)的屬性值
  
  
taidamier.name = "泰達(dá)米爾"  # 姓名
taidamier.hp = 2600  # 生命值
taidamier.atk = 450  # 力
taidamier.armor = 200  # 護(hù)甲值

  
  
# 通過.成員選擇運(yùn)算符,獲取對象的實(shí)例方法
  
  
taidamier.info()  # 只需要調(diào)用實(shí)例方法info(),即可獲取英雄的屬性
taidamier.move()
taidamier.attack()

問題:

創(chuàng)建對象后再去添加屬性有點(diǎn)不合適,有沒有簡單的辦法,可以在創(chuàng)建對象的時(shí)候,就已經(jīng)擁有這些屬性?

init()方法

Click 文檔

在Python中,xx()的函數(shù)叫做魔法方法,指的是具有特殊功能的函數(shù)。

__init__()方法的作用:初始化對象。

class Hero(object):
    """定義了一個(gè)英雄類,可以移動(dòng)和"""
    # Python 的類里提供的,兩個(gè)下劃線開始,兩個(gè)下劃線結(jié)束的方法,就是魔法方法,__init__()就是一個(gè)魔法方法,通常用來做屬性初始化 或 賦值 操作。
    # 如果類面沒有寫__init__方法,Python會(huì)自動(dòng)創(chuàng)建,但是不執(zhí)行任何操作,
    # 如果為了能夠在完成自己想要的功能,可以自己定義__init__方法,
    # 所以一個(gè)類里無論自己是否編寫__init__方法 一定有__init__方法。

    def
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容