面向過程: 過程(流水線式思維)
優點:極大的降低了寫程式的複雜度,只需要順著要執行的步驟,堆疊**即可。
缺點:流程就是用來解決乙個問題,**牽一髮而動全身。
應用場景:一旦完成基本很少改變的場景,著名的例子有linux核心,git,以及apache http server等。
--------------
函式式:將某功能**封裝到函式中,以後無需重複寫**,呼叫方便
--------------
物件導向: 物件(上帝式思維)
優點是:解決程式的擴充套件性。
對某乙個物件單獨修改,會立刻反映到整個體系中,如對遊戲中乙個人物引數的特徵和技能修改都很容易。
缺點:可控性差,無法像面向過程一樣精準的**問題的處理流程與結果,
物件導向的程式一旦開始就由物件之間的互動解決問題,無法**最終結果。
應用場景:需求經常變化的軟體,一般需求的變化都集中在使用者層,網際網路應用,企業內部軟體,遊戲等
物件導向的程式設計並不是全部。對於乙個軟體質量來說,物件導向的程式設計只是用來解決擴充套件性。
---------------------------
類:具有相同特徵的一類事物(人、狗、老虎)(人類 是乙個類, )
物件/例項:具體的某乙個事物(隔壁阿花、樓下旺財)(人類中,具體到某個人,這個具體的人就是乙個具體的例項,也是乙個物件)
例項化:類——>物件的過程
***************====
dict #字典型別 是個大類
#具體到某乙個字典 就是字典的乙個物件
****物件就是已經實實在在 存在的 某乙個 具體 的 個體。
在python中,用變數表示特徵,用函式表示技能,因而具有相同特徵和技能的一類事物就是『類』,物件是則是這一類事物中具體的乙個。
**********
類的宣告:
class date: #類名大寫
變數=值 #
靜態屬性 (資料屬性)
def__init__(self): #
初始化方法 (給物件新增必要的屬性) (self 就是物件本身)
pass
def func(self): #
動態屬性(self必須加) (函式屬性,方法)(類裡面的函式不叫函式,叫方法)
類的兩種作用:
1.屬性引用
2.例項化
屬性引用:
class person: #定義乙個人類
role = '
person'#
人的角色屬性都是人 (類屬性:宣告的類 的屬性)
def walk(self): #
人都可以走路,也就是有乙個走路方法
print("
person is walking...")
print(person.role) #
檢視人的role屬性 (屬性的獲取: 類.屬性 例項.屬性)
print(person.walk) #
引用人的走路方法,注意,這裡不是在呼叫
person.country = 『中國』 #
增加屬性
del person contry #
刪除屬性
person.role = 11 #
修改屬性 (role 本來就有,重新賦值)
例項化:
類名+() 就是例項化,會自動觸發__init__函式,可以用它來為每個例項定製自己的特徵
例項化過程:
構造方法:造物件
初始化:給新生物件新增一些屬性
語法:物件名 = 類名(引數)
p = person('zhou') #類名()就等於在執行person.__init__()
#執行完__init__()就會返回乙個物件。這個物件類似乙個字典,存著屬於這個人本身的一些屬性和方法。
#你可以偷偷的理解:p =
檢視屬性&呼叫方法:
關於self:
self:在例項化時自動將物件/例項本身傳給__init__的第乙個引數,你也可以給他起個別的名字,但不建議這樣做,(**別人看不懂)
類屬性的補充:
一:我們定義的類的屬性到底存到**了?有兩種方式檢視
dir(類名):查出的是乙個名字列表
類名.__dict__:查出的是乙個字典,key為屬性名(函式方法名),value為屬性值(函式方法記憶體位址)(__dict__是字典形式,但是不能修改,只能檢視)
二:特殊的類屬性
類名.__name__#類的名字(字串)
類名.__doc__
#類的文件字串 #功能說明字串
類名.__base__
#類的第乙個父類(在講繼承時會講)
類名.__bases__
#類所有父類構成的元組(在講繼承時會講)
類名.__dict__
#類的字典屬性
類名.__module__
#類定義所在的模組
類名.__class__
#例項對應的類(僅新式類中)
物件的相關知識:
class person: #定義乙個人類
role = '
person'#
人的角色屬性都是人
def__init__
(self, name, aggressivity, life_value):
self.name = name #
每乙個角色都有自己的暱稱;
self.aggressivity = aggressivity #
每乙個角色都有自己的攻擊力;
self.life_value = life_value #
每乙個角色都有自己的生命值;
defattack(self,dog):
#人可以攻擊狗,這裡的狗也是乙個物件。
#人攻擊狗,那麼狗的生命值就會根據人的攻擊力而下降
dog.life_value -= self.aggressivit
物件是關於類的實際存在的乙個例子,即例項
物件/例項只有一種作用:屬性引用
p = person('zhou
',10,1000) #
傳值,預設傳進__init__函式 (預設呼叫__init__)
(p.name)
(p.aggressivity)
(p.life_value)
#zhou#10
#1000
也可以引用乙個方法,因為方法也是乙個屬性,只不過是乙個類似函式的屬性,我們也管它叫動態屬性。
引用動態屬性並不是執行這個方法,要想呼叫方法和呼叫函式是一樣的,都需要在後面加上括號
固定格式:(定義&呼叫)
定義:
class類名:def
__init__
(self,args1,args2):
self.attribute1 = args1 #
attribute(物件的屬性)
self.attribute2 =args2
def func1(self):pass
#method(方法名)
def func2(self):pass
呼叫:物件名 = 類名(kitty,18) #物件就是例項,代表乙個具體的東西 obj.class_name(實參1,實參2...)
#類名() : 類名+括號就是例項化乙個類,相當於呼叫了__init__方法
#括號裡傳引數,引數不需要傳self,其他與init中的形參一一對應
#結果返回乙個物件 (物件的屬性在__init__函式裡面)
物件名.物件的屬性1 #檢視物件的屬性,直接用 物件名.屬性名 即可 obj.[attribute1]
物件名.方法名() #呼叫類中的方法,直接用 物件名.方法名() 即可 obj.method1.()
物件導向 初識物件導向
面向過程思想 步驟清晰簡單,第一步做什麼,第二步做什麼.面向過程適合處理一些較為簡單的問題 物件導向思想 物以類聚,分類的思維模式,思考問題首先會解決問題需要分哪些類,然後對這些類進行單獨思考,最後才是對某個分類下的細節進行面向過程的思索 物件導向適合處理複雜的問題,適合處理需要多人協作的問題 對於...
初識物件導向
1.例項化 2.init 方法 3.類方法和靜態方法 4.訪問控制 5.屬性裝飾器 在python中,用變數表示特徵,用函式表示技能,因而具有相同特徵和技能的一類事物就是 類 物件是則是這一類事物中具體的乙個.三要素類 class 用來描述具有相同的屬性和方法的物件的集合。它定義了該集合中每個物件所...
初識物件導向
開始接觸物件導向程式設計,學習時間不長,寫下點自己目前的理解,總結梳理下最近的學習成果。一切皆是物件,物件導向體系中有這麼一句經典的話。我認為可以這麼理解,物件導向程式設計的關鍵步驟是如何將我們所希望實現的功能抽象為計算機可實現的模型,這些模型我們可以稱之為物件。當我們把具有相同特點的多個物件進一步...