標籤:引用 中國 span 問題 攻擊 tty 優點 apache --
1.楔子2.面向過程VS物件導向
面向過程: 過程(流水線式思維)
優點:極大的降低了寫程式的複雜度,只需要順著要執行的步驟,堆疊代碼即可。
缺點:流程就是用來解決一個問題,代碼牽一髮而動全身。
應用情境:一旦完成基本很少改變的情境,著名的例子有Linux內核,git,以及Apache HTTP Server等。
--------------
函數式:將某功能代碼封裝到函數中,以後無需重複寫代碼,調用方便
--------------
物件導向: 對象(上帝式思維)
優點是:解決程式的擴充性。
對某一個對象單獨修改,會立刻反映到整個體系中,如對遊戲中一個人物參數的特徵和技能修改都很容易。
缺點:可控性差,無法像面向過程一樣精準的預測問題的處理流程與結果,
物件導向的程式一旦開始就由對象之間的互動解決問題,無法預測最終結果。
應用情境:需求經常變化的軟體,一般需求的變化都集中在使用者層,互連網應用,企業內部軟體,遊戲等
物件導向的程式設計並不是全部。對於一個軟體品質來說,物件導向的程式設計只是用來解決擴充性。
---------------------------
類:具有相同特徵的一類事物(人、狗、老虎)(人類 是一個類, )
對象/執行個體:具體的某一個事物(隔壁阿花、樓下旺財)(人類中,具體到某個人,這個具體的人就是一個具體的執行個體,也是一個對象)
執行個體化:類——>對象的過程
===================
3.初識類和對象
dict #字典類型 是個大類
{‘age‘:18} #具體到某一個字典 就是字典的一個對象
****對象就是已經實實在在 存在的 某一個 具體 的 個體。
在python中,用變數表示特徵,用函數表示技能,因而具有相同特徵和技能的一類事物就是‘類’,對象是則是這一類事物中具體的一個。
==========
類
類的聲明:
class Date: #類名大寫變數=值 #靜態屬性 (資料屬性)def __init__(self): #初始化方法 (給對象添加必要的屬性) (self 就是對象本身)passdef 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 = {‘name‘:‘zhou‘,‘walk‘:walk}
查看屬性&調用方法:
- 對象名.(對象的)屬性名稱
- 對象名.(類的)方法名()
關於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 # 每一個角色都有自己的生命值;def attack(self,dog): # 人可以攻擊狗,這裡的狗也是一個對象。 # 人攻擊狗,那麼狗的生命值就會根據人的攻擊力而下降dog.life_value -= self.aggressivit
對象是關於類的實際存在的一個例子,即執行個體
對象/執行個體只有一種作用:屬性引用
p = Person(‘zhou‘,10,1000) #傳值,預設傳進__init__函數 (預設調用__init__)print(p.name)print(p.aggressivity)print(p.life_value)# zhou# 10# 1000
也可以引用一個方法,因為方法也是一個屬性,只不過是一個類似函數的屬性,我們也管它叫動態屬性。
引用動態屬性並不是執行這個方法,要想調用方法和調用函數是一樣的,都需要在後面加上括弧
固定格式:(定義&調用)
定義:
class 類名:def __init__(self,args1,args2):self.attribute1 = args1 #attribute(對象的屬性)self.attribute2 = args2def func1(self):pass #method(方法名)def func2(self):pass
調用:
對象名 = 類名(Kitty,18) #對象就是執行個體,代表一個具體的東西 obj.class_name(實參1,實參2...)
#類名() : 類名+括弧就是執行個體化一個類,相當於調用了__init__方法
#括弧裡傳參數,參數不需要傳self,其他與init中的形參一一對應
#結果返回一個對象 (對象的屬性在__init__函數裡面)
對象名.對象的屬性1 #查看對象的屬性,直接用 對象名.屬性名稱 即可 obj.[attribute1]
對象名.方法名() #調用類中的方法,直接用 對象名.方法名() 即可 obj.method1.()
Python()- 物件導向