核心特性
- 封裝
- 繼承
- 多態:一個父類接口,不同子類的多種實現
封裝連接, 例如django鏈接redis,生成一個redis對象,整個週期都使用這個對象
實例化過程
類 + () == 對象
類的組成
- 屬性:公有屬性 + 私有屬性
- 方法:保存在類的內存中
- 公有變量/類變量/靜態字段:
- 特殊方法
私有屬性
self.__private
:只能對象自己訪問/提供對外訪問接口/對象._類名__私有變量
@property
的騷操作:可以用來獲取處理值
@property
def usd_percent_change_7d(self) -> float:
num = self.data['quotes']['USD']['percent_change_7d']
if num is None:
return 0
return float(num)
公有變量/類變量
和方法同一級,沒有self修飾,共同存在於內存中 == 類定義時也會一起被定義,不會等到實例化,且實例化之後,如果實例通過obj.class_attr方式修改類變量,則實例將會自己生成一個實例自有的屬性,實例是不會修改到類變量的
改動類變量只能通過類名來調用, 因爲對象賦值一個屬性是會重新創建的,對象相當於一個作用域
class X:
hi = []
a = X()
b = X()
a.foo = 1 # a創建了一個屬性
print(a.foo)
print(b.foo) # b是沒有foo這個屬性的
特殊方法
__del__
:引用被清空,自動執行,程序運行完畢,執行此函數,python中del關鍵字時刪除的是變量名,而不是刪除內存中的變量指向的地址存儲的數據
新式類 & 經典類
新式類
- 定義類
- 繼承父類方法
- 多繼承繼承順序:左,右,上 == 廣度優先
經典類
- 定義類
- 繼承父類方法
- 多繼承繼承順序(Python3.+中跟新式類一致):左,上,右 == 深度優先