物件導向:它是一種程式設計思想,一種通過多個物件之間互相協作完成功能處理流程的程式設計思路,它是相對於面向過程而言的,是面向過程程式設計思想的補充和完善,更加適用於處理複雜業務流程的系統開發。
封裝:體現了物件對於敏感資料的保護特徵
繼承:體現了**的復用和功能的擴充套件
多型:體現了不同操作環境中**的多樣性【程式的健壯性】
思路:大量的程式開發、大量的問題解決-> 處理問題的固定步驟-> 成熟的處理方式-> 思路
類(class):就是物件的型別,代表了某一批物件的共同特性和特徵。類是物件的抽象,而物件是類的具體例項
物件:客觀世界裡的一切事物都可以看作是乙個物件,每乙個物件應當具有屬性(靜態特徵,比如乙個班級,乙個專業,乙個教室)和行為(動態特徵,例如:學習,開會,體育比賽等)兩個要素。 物件是由一組屬性和一組行為構成的。
型別的定義
型別定義語法規則
操作步驟:
建立型別->定義特徵->定義行為
操作規範:型別名稱~帕斯卡命名法:乙個或者多個單詞組成,每個單詞首字母大寫
特徵【屬性】~
【不推薦】駝峰命名法:乙個或者多個單詞組成,第乙個單詞全部小寫,後面每個單詞首字母大寫
【店家推薦】下劃線命名法
行為【方法】~ 參考屬性命名規範
class person:
def __init__(self,name):
self.name = name
def eat(self):
print(f"吃冰激凌")
型別只是乙個宣告、只是乙個概念,就類似於函式的存在,並不包含具體資料。
物件是通過型別建立的,物件中會包含具體的資料。
p = person("大帥比")
p.eat()
類物件,好比有一籃「水果」,籃子裡面的水果沒有重複,那麼這一籃中的「水果」就屬於乙個類,是抽象的,就像有人對你說「給我水果」,你的第一反應一定是「什麼水果?」,所以是不確定性的。
例項物件,好比籃子裡面的「蘋果」,是乙個具體的物件,即乙個例項。我想有人對你說「給我蘋果」,你應該不會想選擇哪個水果吧
將全部屬性私有化【使用兩個下劃線開頭,描述該屬性是私有的,外界不能直接訪問】
給每個屬性,提供set/get訪問方法
在訪問方法中,就可以新增訪問限制,保護資料安全
物件導向繼承的意義【**冗餘、功能擴充套件】
1.在python中實現的封裝操作,不是通過許可權限制而是通過改名(name mangling 改名策略)實現的,名字變了找不到而已。
2.可以使用 __dict__可以檢視屬性(包括私有屬性)的值
在類的內部使用私有屬性,python內部會自動進行轉換成 _類名__屬性名。
在類的外部不能給物件新增私有屬性因為不能轉換成_類名__屬性名型別。
3.可以通過 物件名._類名__方法或類名._類名__方法名訪問到(但禁止這麼幹)
可以使用 _類名__私有屬性名來獲取值。但是一般情況下不要使用,了解即可
誤區:什麼樣的屬性應該封裝?封裝的話是不是一定要新增限制訪問條件?
(1) 為了讓定義的資料型別,能使用不同的應用場景,一幫情況下我們
要對當前型別的所有屬性進行封裝處理。
(2) 封裝屬性之後,會提供訪問屬性資料的set/get方法,開發過程中方法中不需要新增
任何限制條件,只是預留了可以新增限制條件的方法而已,後期根據專案需求進行限制
條件的完善。
誤區:私有屬性,完全不能直接訪問
我們定義了私有屬性,就是兩個下劃線開頭的屬性
理論上外界不能直接訪問,而是要通過我們提供的set/get方法間接訪問
功能開發過程中,**和功能都可能會存在一些問題
如果發現問題~一定要及時溝通,而不是私自修改。
體現的是,某個小型別,屬於某個大型別的
如:男人 是 人 的一種型別
生活中:約定
**中:約定 man型別就是person型別 非強制
**中:強制約束:通過繼承關係,體現某個型別屬於另乙個型別
繼承的語法:
class 型別名稱(要繼承的型別):
pass
繼承中方法重寫什麼意思?怎麼操作
子類和父類中擁有方法名相同的方法,說明子類重寫了父類的方法
重寫的作用:父類中已經有了這個方法,但子類想修改裡面的內容,直接修改父類是不好的,就需要用到重寫
繼承時從父類預設繼承了什麼方法?
子類中就可以繼承父類中的屬性和方法【公共】
子類中可以直接使用父類的屬性和方法
構造方法
new建立物件的方法 一般不使用~直接通過父類建立物件即可。
init初始化資料的方法 一般會重寫該方法,用來初始化物件資料
slots封裝時,限制屬性的
str物件字元列印方式;預設情況列印記憶體中16進製表示的位置
repr互動模式中,字元列印方式
hash獲取兌現的hash資料,用於判斷的依據
ne不等於:not equals;兩個物件使用!=判斷的
ge大於等於:grant or equals 判斷 >=
gt大於: grant than判斷 >
le小於等於:less or equals 判斷 <=
lt小於 less than 判斷 <
eq判斷等於 equals 判斷 ==
dict將物件轉換成字典
doc說明文件
class型別,類似於type
format
getattribute
delattr
sizeof
reduce
reduce_ex
dir
__init_subclass
module
setattr給屬性設定資料-一般不重寫
雙下劃線開頭和結尾的方法:型別的魔法方法
多繼承的意義
乙個物件在不同的場景中,可能扮演不同的角色,使用多繼承,減少**冗餘
多繼承的方法查詢順序【python3 | python2經典類】
在python2 中:查詢順序是按照深度優先
在python3 中:查詢順序是按照廣度優先
執行時多型
在執行過程中~如果子類中重寫了方法,執行子類的方法,如果沒有重寫則執行父類中的方法【執行過程中的多種狀態切換:執行時多型】
設計時多型
python中的多繼承
體現的是什麼樣的程式設計思想:乙個物件在不同場景中,可能扮演不同的角色【設計時多型】
多型~和封裝以及繼承不同的是,沒有固定的語法,沒有固定的思路,只有操作的方式。
從專案中體現。
物件導向總結
成員變數 1.類中,方法外 2.建立物件存在與堆中,物件被 時一併消失 3.成員變數有預設值 區域性變數 1.方法中 2.呼叫方法存在於棧幀中,方法呼叫完畢隨棧幀一併消失 3.區域性變數沒有預設值 public class koo 重寫遵循 兩同兩小一大 兩同 1.方法名稱相同 2.引數列表相同 兩...
物件導向總結
1 類與物件的區別 類是物件的抽象,物件是類的例項 2 成員變數 與 區域性變數區別 1 定義在類中 定義在方法中 2 作用在類中 作用於整個方法 3 系統自動初始化 使用前必須初始化 4 隨物件一同載入到堆中,物件無引用時銷毀 在方法呼叫時,在棧中產生一塊棧幀,方法執行完後消失3 封裝實現 1 屬...
物件導向總結
物件導向的程式設計關注於類的設計!1 乙個專案或工程,不管多龐大,一定是有乙個乙個類的構成的。2 類是抽象的,好比是製造汽車的圖紙。而具體的一輛一輛的車,是根據圖紙製造的,實際上就是類的例項化 3.完成乙個專案 或功能 的思路 1 所要完成的功能對應的類的物件是否存在 2 若存在,則通過物件直接呼叫...