面向對象編程,類和對象
一、面向對象
1、什么是面向對象
面向對象是一種編程思想,是前輩們總結出的經驗,指導程序員如何編寫出更好的程序 ,
核心是對象,程序就是一系列對象的集合, 程序員負責調度控制這些對象來交互着完成任務。
2、幾個案例
案例1:把大象裝進冰箱 ?
面向過程:
1.打開冰箱
2.裝入大象
3.關閉冰箱
面向對象:
找個具備裝大象的技能的對象
總結:在面向對象中程序員的角度發生改變,從具體的操作者變成了指揮者
強調:對象不是憑空產生的,需要我們自己設計
案例2::西天取經
如來有一堆破書要傳出去,他沒有自己干,而是找了五個對象幫他去干
如來只要負責控制調度的對象即可
如果某個對象發生變化,也不會影響其他的對象 , 擴展性
案例3::曹操吟詩,命手下將所作之詩刻於木板之上
第一天:喝酒吃肉,人生真爽
第二天:喝酒吃肉,人生幾何
第三天:對酒當歌,人生幾何
3、面向對象的三大優點
1.擴展性
2.靈活性
3.重用性
缺點:
1.程序的復雜度提高了
2.無法准確預知結果
4、使用場景
對擴展性要求較高的程序 ,通常是直接面向 用戶的,例如:qq,微信
二、面向過程編程思想
1、關注的核心是過程
過程就是一步一步的執行步驟,既先干啥在干啥
2、優缺點
優點:邏輯清晰 , 復雜問題簡單化,流程化
缺點: 擴展性差,可維護性差
3、使用場景
對擴展性要求較低的程序例如:系統內核,git,計算器
記住:不是所有程序都要面向對象,得分析具體需求
三、類和對象(這是OOP中的最核心的兩個概念)
1、類
既類型,類別 ,是一種抽象概念
是一系列具備相同特征和相同行為的對象的集合
2、對象
就是具體存在的某個事物,具備自己的特征和行為
對象就是特征和技能的結合體
3、類和對象的關系
類包含一系列對象
對象屬於某個類
在生活中是先有對象再有類
而在程序中是先有類才能有對象,我們必須先告訴計算機這類的對象有什么特征有什么行為
總結出一個結論:在使用面向對象編程時,第一步就是思考需要什么樣的對象,對象具備什么樣的特征和行為,從而根據這些信息總結出需要的類型
4、創建類和對象
定義類的語法
class 類的名稱:
# 類中的內容 描述屬性和技能
#描述屬性用變量
#描述行為用函數
#類名稱 書寫規范 首先是見名知意 名稱是大駝峰命名法
#駝峰就是單詞首字母大寫 , 大駝峰是第一個字母大寫,小駝峰是第一個字母小寫
創建對象的語法:
class Person:
pass
#創建對象
p = Person()
屬性的寫法:
# 屬性可以寫在類中
# 類中的屬性,是所有對象公共的
# 也可以寫在對象中
# 對象中的屬性,是每個對象獨特的(不一樣的)
# 如果類中和對象中存在同樣的屬性,先訪問對象 如果沒有在訪問類
# 練習: 描述一個老師類 需要包含 一個公共屬性和 一個獨特的屬性
class Teacher:
school = "oldboy"
t1 = Teacher()
t1.name = "jack"
t1.age = 28
屬性的增刪改查
# 增加屬性
# 對象變量名稱.屬性名稱 = 屬性值
# 刪除屬性
del 對象的變量名稱.屬性名稱
# 修改
對象.屬性 = 新的值
# 查看屬性 訪問的是對象的所有屬性
print(對象.__dict__)
# 訪問對象的類信息
print(對象.__class__)
5、init方法
叫做初始化方法,本質上就是一個函數
特點1: 當實例化對象時,會自動執行init方法
特點2:會自動將對象作為第一個參數傳入,參數名稱位self ,self可以是別的名字,但不建議改
功能:用戶給對象賦初始值
練習:創建一個類具備幾個屬性,通過初始化方法來給他設置屬性
class Dog:
def __init__(self,kind,color,age):
self.kind = kind
self.color = color
self.age = age
d1 = Dog("二哈","黑白",1)
d1 = Dog("泰迪","棕色",2)
注意:該函數不能有任何返回值/.... 只能是None 規定如此..
對象的精髓就是將數據和處理數據的函數整合到一起 ,這樣一來拿到一個對象就同時拿到了需要處理的數據以及處理數據的函數
6、對象的綁定方法
默認情況下類中的方法都是對象綁定方法
其特殊之處在於,
當使用對象調用該函數時會自動傳入對象本身,作為第一個參數
當使用類名來調用時他就是一個普通函數,有幾個參數就得傳幾個參數
練習:寫一個學生類,具備一個打招呼的技能 要能輸出自己的名字信息
class Student:
def __init__(self,name):
self.name = name
def say_hi(self):
print("hello my name is %s" % self.name)
7、類綁定方法
類綁定方法用@classmethod來裝飾
特殊之處:不管用類還是對象調用,都會自動傳入類本身,作為第一個參數
什么時候綁定給對象:當函數邏輯需要訪問對象中的數據時
什么時候綁定給類:當函數邏輯需要訪問類中的數據時
8、非綁定方法
或叫做靜態方法,就是即不需訪問類的數據,.也不需要訪問對象的數據
語法:@staticmethod
不常用