優點是解決了程式的拓展性。對某乙個物件單獨修改,會立刻反應到整個體系中。
缺點:可控性差,無法向面向過程的程式設計流水線式的可以很精緻的**問題和處理問題和處理流程與結果
需求經常變化的軟體,一般需求的變化都集中在使用者層,網際網路應用,企業內部軟體,遊戲等都是物件導向的程式設計大顯身手的好地方
類:具有同一特徵的一類事物
物件/例項:具有的某乙個事物
例項化:類--->物件的過程
靜態變數
類中的變數是靜態變數
物件中的變數只屬於物件本身,每個物件都屬於位元組的空間來儲存物件變數
繫結方法
乙個類的物件是另乙個類物件的屬性
當類之間有顯著不同,並且較小的類是較大的類所需的元件時,用組合比較好
繼承語法
繼承 -- 需要解決**的重複
b繼承a,a是父類,b是子類
a是父類 基類 超類
b是子類 派生類
繼承的用法
子類中可以使用父類中的方法 靜態變數
當子類和父類的方法重名的時候,我們只會用子類的方法,而不會去呼叫父類的方法
子類想要呼叫父類的方法的同時還想執行自己的同名方法
在子類的方法中呼叫父類的方法:父類名.方法(self)
單繼承子類的物件,如果去呼叫方法,永遠優先呼叫自己的
如果自己有,用自己的
如果自己沒有,用父類的
自己有 還想用父類的:直接在子類方法中呼叫父類的方法 父類名.方法名(self)
多繼承乙個類有多個父類,在呼叫父類方法的時候,按照繼承順序,先繼承的先尋找
在python3中 所有的類都繼承object類,都是新式類
python2中 不繼承object的類都是經典類,繼承object類的就是新式類了
單繼承方面:無論是新式類還是經典類都是一樣的
多繼承:
在走到乙個點,下乙個點既可深度走,也可以從廣度走的時候,總是先走廣度,再走深度,廣度優先
在經典類中,都是深度優先,總是在一條路走不通之後在換一條路,走過的點不會再走
乙個類表現出的多種形態
在python中處處是多型
如果想讓兩個型別的物件都可以傳,那麼必須讓兩個類繼承同乙個父類,在制定類的時候使用父類來指定
反射hashttr:判斷某個函式或者變數是否存在
getattr:如果instance物件中有屬性name則列印self.name的值,否則列印'net find'
callable:判斷物件是否可以被呼叫,可以返回true,不可以返回false
廣義上的封裝
把屬性和方法裝起來,在外部不能直接呼叫,需要通過類名的方式呼叫
狹義上的封裝
把屬性和方法藏起類,在外部不能呼叫,只能在內部偷偷呼叫
封裝的語法
私有的靜態變數
私有的例項變數
私有的繫結方法
私有的特點
私有的可以在內部使用
私有的不能在外部使用
私有的也不可以在子類中使用
原理
class user:
__country = 'china'
__role = '法師'
def func(self):
print(self.__country)#在內部呼叫的時候會自動幫你加上類名
print(user.__country)#早類的外部呼叫不到是因為python沒有自動為你加_user
公有的 public 類內類外都能用,父類子類都能用 python支援
保護的 protect 保護的 類內能用,父類子內都能用,類外不能用 python不支援
私有的 private 私有的 本類的類內部能用,其他地方都不能用 python支援
c 物件導向程式設計 物件導向
什麼是物件導向 是對現實世界理解和抽象的方法。物件導向程式設計的特點 易維護,易擴充套件,靈活性好,重用 類 對事物的抽象定義,即事物具有的共同特徵和行為。物件 即對類進行例項 類是抽象的,物件是具體的 類的定義 語法 訪問修飾符 class 類名類的成員 包括字段,屬性,方法,常量,事件和索引器等...
物件導向程式設計
物件導向程式設計 抽象 封裝 繼承 多型 單一職責原則 就乙個類而言,應該僅有乙個引起它變化的原因。開放封閉原則 軟體實體應該可以擴充套件,但是不可修改。所有的設計模式都是對不同的可變性進行封裝,從而使系統在不同的角度上達到開發封閉原則。依賴倒轉原則 a 高層不應該依賴低層,兩個都應該依賴抽象。b ...
物件導向程式設計
class team def init self self.name tampa bay buccaneers bucs team print bucs.name tampa bay buccaneers 當呼叫team 函式時,會自動呼叫init函式,self是自動傳入到init中的引數,它指向當...