網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
前言
版本:
- windows 10.0
- python 3.8
類
在Python數(shù)字比較與類結(jié)構(gòu)中有簡(jiǎn)略提到類,那么什么是類呢?
在python中定義一個(gè)類很簡(jiǎn)單,使用關(guān)鍵字class
就能實(shí)現(xiàn)。
class Animal: pass
如何使用它,在類結(jié)構(gòu)中稱作實(shí)例化。
animal = Animal()
這樣,就有了一個(gè)Animal的實(shí)例。
繼承
類的其中一個(gè)特性就是能夠繼承,把Animal
類豐富下,將其作為基類:
class Animal: property_ = '能夠思考' def __init__(self, name, age, value): self.name_ = name self.age_ = age self.val_ = val
在這里面,property_作為類屬性,無(wú)需實(shí)例化就能使用,而__init__下的self.name_, self.age_和self.val_需要在實(shí)例化后才能使用,且這里__init__需要傳入?yún)?shù),其中self用來(lái)指代類本身,不作為傳參值。
print(Animal.property_) # 輸出:能夠思考 print(Animal.name_) # 引發(fā)AttributeError錯(cuò)誤 a = Animal('阿黑', 12, 70) print(a.property_) # 能夠思考 print(a.name_) # 阿黑 print(a.age_) # 12 print(a.val_) # 70 復(fù)制代碼
Animal
類可以正常使用,再寫(xiě)一個(gè)Monkey
類,繼承Animal
類。
class Monkey(Animal): pass
在Monkey
后面調(diào)用Animal
類,繼承了其屬性及方法,也可通過(guò)實(shí)例化,查看Monkey
實(shí)例的屬性。
print(Monkey.property_) # 類屬性: 能夠思考 m = Monkey('阿黃', 15, 40) print(m.name_) # 阿黃 print(m.age_) # 15 print(m.val_) # 40
當(dāng)然也能繼承類,對(duì)其已有的方法進(jìn)行改寫(xiě),這里再定義一個(gè)Cat
類。
class Cat(Animal): def __init__(self, name, age): self.name_ = '我是' + name self.age_ = age
Cat
類繼承后對(duì)__init__進(jìn)行了改寫(xiě),修改了name_,并且刪除了val_。
print(Cat.property_) # 類屬性:能夠思考 c = Cat('小花', 6) print(c.name_) # 我是小花 print(c.age_) # 6 print(c.val_) # 引發(fā)AttributeError報(bào)錯(cuò)
對(duì)于類屬性還是能使用,不見(jiàn)的val_再調(diào)用就會(huì)引發(fā)報(bào)錯(cuò)。
除此之外,如果想在保留基類的屬性基礎(chǔ)上增加屬性,可以用super()
進(jìn)行處理:
class Fish(Animal): def __init__(self, name, age, val, env): super().__init__(name, age, val) self.env_ = env
在實(shí)例化Fish
類時(shí),需要多傳入一個(gè)生活環(huán)境env參數(shù):
f = Fish('小鯉', 2, 57, '水里') print(f.env_) # 水里
mro
mro
的含義為方法解析順序
,在類的繼承中,明白解析順序是尤為重要的,對(duì)于上述幾個(gè)類可以簡(jiǎn)單看下mro的順序情況。
Animal.mro() # [__main__.Animal, object] Monkey.mro() # [__main__.Monkey, __main__.Animal, object] Cat.mro() # [__main__.Cat, __main__.Animal, object] Fish.mro() # [__main__.Fish, __main__.Animal, object]
mro的解析順序是從左至右,越在左邊優(yōu)先級(jí)越高,可以看到最先解析的是當(dāng)前類本身,再是繼承的上一個(gè)類,最后是原生object
類。上述羅列的所有類,繼承關(guān)系都很簡(jiǎn)單,mro的順序也簡(jiǎn)單明了。
總結(jié)
原文鏈接:https://juejin.cn/post/7124601326914240519
相關(guān)推薦
- 2022-07-27 Python實(shí)現(xiàn)倉(cāng)庫(kù)管理系統(tǒng)_python
- 2021-12-03 c++11多種格式時(shí)間轉(zhuǎn)化為字符串的方法實(shí)現(xiàn)_C 語(yǔ)言
- 2023-01-23 Linux?paste命令用法匯總_linux shell
- 2022-04-25 JQuery實(shí)現(xiàn)Table的tr上移下移功能_jquery
- 2022-06-27 Vscode的SSH插件遠(yuǎn)程連接Linux的實(shí)現(xiàn)步驟_其它綜合
- 2022-05-27 C++?算法精講之貪心算法_C 語(yǔ)言
- 2024-03-09 【Redis】什么是緩存擊穿,如何預(yù)防緩存擊穿?
- 2022-11-11 利用Python程序讀取Excel創(chuàng)建折線圖_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支