什麼是面向對象:程序員
它是一種編程思想,是前輩總結出來的經驗,知道程序員如何更好的編寫程序,編程
核心是對象,程序就是一系列對象的集合,程序員經過負責調度這些對象讓他們交互完成任務微信
相對於面向流程,就像流水線同樣,親自把製做手機的流程分紅不少個小步驟,一一實現函數
面向對象,就像找到能管理流水線的人,讓他負責流水線的運做oop
案例: 把大象裝進冰箱?ui
面向過程:spa
1.拿起大象設計
2.打開冰箱對象
3.裝入大象遊戲
4.關閉冰箱
面向對象:
找到具有裝大象技能的對象,裝入大象
從面向過程到面向對象,程序員實現從一線流水工人到選拔流水工人的管理層進化,但要說明的是對象不是憑空產生的,須要咱們本身先設計,後調用.
其它案例:
西天取經:一個對象發生變化,並不影響其它對象,拓展性
曹操吟詩:對象能夠重複的使用
1.擴展性,更方便的加入其它功能,QQ,微信
2.靈活性,能夠隨意的替換,西天取經
3.重用性,活字印刷相對於竹簡能夠重複利用,曹操吟詩
1.程序的複雜性提升,須要先定義一個個對象,以後再來調用,複雜性大幅提升
2.沒法準確地預知結果,打遊戲你很難知道哪一個英雄拿到最後的勝利點
關注的核心是流程,過程就是一步步執行流程的步驟,先作什麼在作什麼
優勢:邏輯清晰,將複雜問題進行拆解簡單化\流程化
缺點:擴展性差,可維護性差
使用場景:
面向流程通常面向程序員和系統硬件的程序,執行流程比較固定,對拓展性要求較低的,系統內核,計算器等
面向對象:直接面對終端用戶,用戶需求不斷變化,因此對拓展性要求高,方便增刪改查的程序,好比QQ,微信的
根據不一樣的場景使用最合適的編程方式
這個是oop(面向對象)中最核心的兩個概念
就是類型,類別,一種抽象概念,就是一系列具備相同特徵和相同行爲的對象的集合
就是一個實實在在的具體的某個事物,具有本身的特徵和行爲
對象就是特徵和行爲的結合體
類和對象的關係
類裏面包含一系列的對象,對象屬於某一個類
在生活中是前後對象後有類,而在程序中確實相反的,咱們須要先定義類,而後在再定義對象,由於咱們須要先告訴計算機這類的對象都有什麼共同的特徵和行爲
總述:在使用面對對象編程時,第一步是思考須要什麼樣的對象,對象具有什麼樣的特徵和技能,從而根據這些信息總結出須要的類型
定義類的語法
class 類的名稱:
# 類中的內容 描述屬性和技能
# 描述屬性用變量
# 描述技能用函數
# 類命名 書寫規範 首先是見名知意 名稱用大駝峯命名法
# 駝峯就是單詞的首字母大寫
class Student:
pass
stu = Student
print(stu) # <class '__main__.Student'>
屬性能夠寫在類中,類中的屬性,是全部對象共用的
屬性也能夠寫在對象中,對象中的屬性,是每一個對象獨特的(不同的)
若是類和對象中,有一樣的屬性,先訪問對象,若是沒有再訪問類
# 描述一個老師(包含,一個公共屬性和一個獨特屬性)
class Teacher:
school = 'oldboy'
t1 = Teacher()
t1.name = 'ryan'
t1.age = 18
增長屬性
對象變量名稱.屬性名稱 = 屬性值
刪除屬性
del 對象的變量名稱.屬性名稱
修改
對象變量名.屬性名 = 新屬性值
查看屬性:全部屬性\類信息
print(對象.__dict__) 全部屬性
print(對象.__class__) 訪問類信息
print(Teacher.__dict__)
# {'__module__': '__main__', 'school': 'oldboy', '__
# dict__': <attribute '__dict__' of 'Teacher' objects>,
# '__weakref__': <attribute '__weakref__' of 'Teacher' objects>,
# '__doc__': None}
print(Teacher.__class__) # <class 'type'>
class Dog:
def __init__(self, kind, color, age):
self.kind = kind
self.color = color
self.age = age
d1 = Dog('牧羊犬', '黃白', '2')
d2 = Dog('哈士奇', '黑白', '1')
d3 = Dog('泰迪犬', '棕黃', '1')
# 注意:這個函數不能有任何返回值,只能是None,規定如此..
class Student:
school = "oldboy"
def __init__(self, name):
self.name = name
def say_hi(self):
print(f'hi,my name is {self.name}.')
stu = Student('ryan')
stu.say_hi() # hi,my name is ryan.
非綁定方法不重要
7.綁定方法與非綁定方法
6.初始化方法
5.屬性的查找順序
4.如何設計屬性
3.如何建立類和對象
2.類和對象的概念
對比,面向過程的優缺點 以及使用場景
1.面向對象的概念
get是從文件中獲取對象
save是將對象存儲到文件中
例子:爲學生類添加一個save方法 一個get方法
通常不經常使用,不如直接在外面定義一個函數
語法:@staticmethod
或者叫作靜態方法,就是不須要類和對象的數據時
函數邏輯須要訪問對象或者類中的數據時,就綁定給對象或者類
特殊之處:無論用類仍是對象調用,都會自動傳入類自己,做爲第一個參數
類綁定方法用@classmethod來裝飾
而使用類名來調用,它就是一個普通函數,有幾個參數傳遞就得傳幾個
使用對象調用該函數時,會自動傳入對象自己,做爲第一個參數
默認的類中使用的方法都是對象的綁定方法,特殊的地方就是:
對象的精髓就在於將獲取數據的變量名和處理數據的函數功能融合在一塊兒,因此咱們經過一個對象就得到數據並處理數據.
案例:狗的類別
功能:用戶給對象賦初始值
特色2:會自動將對象做爲第一個參數傳入,參數名稱爲self(附:咱們能夠吧self改爲其餘名字,可是不建議改)
特色1:當實例化對象時,會自動執行init方法
init叫作初始化方法,本質也是一個函數
屬性的增刪改查
屬性的寫法
建立對象的語法