網站首頁 編程語言 正文
前言
版本:
- windows 10.0
- python 3.8
類
在Python數字比較與類結構中有簡略提到類,那么什么是類呢?
在python中定義一個類很簡單,使用關鍵字class
就能實現。
class Animal: pass
如何使用它,在類結構中稱作實例化。
animal = Animal()
這樣,就有了一個Animal的實例。
繼承
類的其中一個特性就是能夠繼承,把Animal
類豐富下,將其作為基類:
class Animal: property_ = '能夠思考' def __init__(self, name, age, value): self.name_ = name self.age_ = age self.val_ = val
在這里面,property_作為類屬性,無需實例化就能使用,而__init__下的self.name_, self.age_和self.val_需要在實例化后才能使用,且這里__init__需要傳入參數,其中self用來指代類本身,不作為傳參值。
print(Animal.property_) # 輸出:能夠思考 print(Animal.name_) # 引發AttributeError錯誤 a = Animal('阿黑', 12, 70) print(a.property_) # 能夠思考 print(a.name_) # 阿黑 print(a.age_) # 12 print(a.val_) # 70 復制代碼
Animal
類可以正常使用,再寫一個Monkey
類,繼承Animal
類。
class Monkey(Animal): pass
在Monkey
后面調用Animal
類,繼承了其屬性及方法,也可通過實例化,查看Monkey
實例的屬性。
print(Monkey.property_) # 類屬性: 能夠思考 m = Monkey('阿黃', 15, 40) print(m.name_) # 阿黃 print(m.age_) # 15 print(m.val_) # 40
當然也能繼承類,對其已有的方法進行改寫,這里再定義一個Cat
類。
class Cat(Animal): def __init__(self, name, age): self.name_ = '我是' + name self.age_ = age
Cat
類繼承后對__init__進行了改寫,修改了name_,并且刪除了val_。
print(Cat.property_) # 類屬性:能夠思考 c = Cat('小花', 6) print(c.name_) # 我是小花 print(c.age_) # 6 print(c.val_) # 引發AttributeError報錯
對于類屬性還是能使用,不見的val_再調用就會引發報錯。
除此之外,如果想在保留基類的屬性基礎上增加屬性,可以用super()
進行處理:
class Fish(Animal): def __init__(self, name, age, val, env): super().__init__(name, age, val) self.env_ = env
在實例化Fish
類時,需要多傳入一個生活環境env參數:
f = Fish('小鯉', 2, 57, '水里') print(f.env_) # 水里
mro
mro
的含義為方法解析順序
,在類的繼承中,明白解析順序是尤為重要的,對于上述幾個類可以簡單看下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的解析順序是從左至右,越在左邊優先級越高,可以看到最先解析的是當前類本身,再是繼承的上一個類,最后是原生object
類。上述羅列的所有類,繼承關系都很簡單,mro的順序也簡單明了。
總結
原文鏈接:https://juejin.cn/post/7124601326914240519
相關推薦
- 2022-05-12 python遍歷文件夾內文件并檢索文件中的中文內容
- 2022-03-22 ASP.NET Core中如何使用Dapper
- 2022-10-25 c++標準模板庫:STL
- 2022-07-21 css讓不定寬高的div,垂直水平居中
- 2022-11-19 Golang切片Slice功能操作詳情_Golang
- 2022-08-17 jQuery實現購物車_jquery
- 2022-10-15 Qt實現簡單UDP通信_C 語言
- 2022-05-15 python數字類型和占位符詳情_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支