面向對象相關
面向對象的三大特征
封裝 : 把固定功能的代碼封裝到一個代碼塊,函數,對象,打包成模塊
繼承 : 子類可以自動擁有父類中除了私有屬性外的其他所有內容
多態 : 同一個對象,多種形態
類的成員
變量 :
1.實例變量(字段) : 給對象用的
2.類變量(靜態變量) : 多個對象共享的.最好是用類名來訪問
方法 :
1.成員方法(實例方法) : 對象直接訪問的方法叫成員方法
2.靜態方法 : 不需要給方法傳遞self
@staticmethod def func(): pass
3.類方法 : 類方法被調用時也不需要傳遞實例對象
@classmethod def func1(cls, a, b):pass
屬性:
class Person: def __init__(self, name, gender, birth): self.name = name self.gender = gender self.birth = birth # 2000 2018 # 年齡 -> 應該是算出來的. 而不是直接存儲 @property # 把一個方法更改成一個屬性, 每次拿屬性的時候都會自動的去執行這個方法 # 方法的返回值就是屬性值 def age(self): # 實例方法print("我是方法") return 2018 - self.birth
1. 方法參數只能有一個self
2. 方法上方要寫@property
3. 調用的時候,不需要寫括號.直接當成屬性變量來用就可以了
私有:
使用__作為前綴,那麽這個方法或者變量就是一個私有的
私有變量 : self.__age = age
私有方法 : def __age(self): pass
類與類之間的關系:
1. 依賴關系
2. 關聯關系
3. 組合關系
4. 聚合關系
5. 繼承關系 : self就是你訪問方法的那個對象,先找自己,再找父類
6. 實現關系
類中的特殊成員
1. 類名()會自動執行__init__()
2. 對象()會自動執行__call__()
3. 對象[key]會自動執行__getitem__()
4. 對象[key] = value 會自動執行__setitem__()
5. del 對象[key]會自動執行__delitem__()
6. 對象+對象會自動執行__add__()
7. with對象as變量會自動執行__enter__和__exit__
8. 打印對象的時候會自動執行__str__
9. 去掉hash __hash__ == None 對象就不可哈希了
創建對象的步驟 : 加載類 → 開辟內存(__new__) → 初始化(__init__) → 使用對象調用方法
isinstance, type, issubclass函數
issubclass(Bar, Foo) 這個內置函數判斷xx類是否是xxx類型的子類
type(obj) 查看obj是由哪個類創建的
isinstance(Foo(), Foo) 判斷xxx是xx類型的數據,沒有type精準,只能往上判斷,是否是XX家族體系中的
函數和方法
1. 類方法.不論任何情況,都是方法
2. 靜態方法,不論任何情況.都是函數
3. 實例方法,如果是實例訪問.就是方法.如果是類名訪問就是函數
types模塊
from types import MethodType, FunctionType def func(): pass print(isinstance(func, FunctionType)) # True print(isinstance(func, MethodType)) # False
面向對象相關