面向過程的程序設計的核心是過程(流水線式思惟),過程即解決問題的步驟,面向過程的設計就比如精心設計好一條流水線,考慮周全何時處理什麼東西。python
優勢是:極大的下降了寫程序的複雜度,只須要順着要執行的步驟,堆疊代碼便可。函數
缺點是:一套流水線或者流程就是用來解決一個問題,代碼牽一髮而動全身。spa
優勢是:解決了程序的擴展性。對某一個對象單獨修改,會馬上反映到整個體系中,如對遊戲中一我的物參數的特徵和技能修改都很容易。設計
缺點:可控性差,沒法向面向過程的程序設計流水線式的能夠很精準的預測問題的處理流程與結果,面向對象的程序一旦開始就由對象之間的交互解決問題,即使是上帝也沒法預測最終結果。因而咱們常常看到一個遊戲人某一參數的修改極有可能致使陰霸的技能出現,一刀砍死3我的,這個遊戲就失去平衡。code
面向對象中的一些名詞:類、對象、實例、實例化對象
類:具備相同特徵的一類事物(人、狗、老虎)blog
對象/實例:具體的某一個事物(隔壁阿花、樓下旺財)繼承
實例化:類——>對象的過程遊戲
python中的一切皆爲對象,類型的本質就是類。文檔
>>> dict #類型dict就是類dict
<class 'dict'>
>>> d=dict(name='eva') #實例化
>>> d.pop('name') #向d發一條消息,執行d的方法pop
'eva'
在python中,用變量表示特徵,用函數表示技能,於是具備相同特徵和技能的一類事物就是‘類’,對象是則是這一類事物中具體的一個。
(1)定義類
#定義函數的方式
def functionName(args): '函數文檔字符串' 函數體
#定義類的方式
''' class 類名: '類的文檔字符串' 類體 '''
#咱們建立一個類
class Data: pass
#定義函數的屬性
class Person: #定義一我的類
role = 'person' #人的角色屬性都是人(類下的靜態屬性)
def walk(self): #人均可以走路,也就是有一個走路方法,也叫動態屬性
print("person is walking...")
(2)屬性引用(類名.屬性)
class Person: #定義一我的類
role = 'person' #人的角色屬性都是人
def walk(self): #人均可以走路,也就是有一個走路方法
print("person is walking...") print(Person.role) #查看人的role屬性
print(Person.walk) #引用人的走路方法,注意,這裏不是在調用
class Person: #定義一我的類
role = 'person' #人的角色屬性都是人
def __init__(self,name): self.name = name # 每個角色都有本身的暱稱;
def walk(self): #人均可以走路,也就是有一個走路方法
print("person is walking...") print(Person.role) #查看人的role屬性
print(Person.walk) #引用人的走路方法,注意,這裏不是在調用
實例化的過程就是類——>對象的過程
本來咱們只有一個Person類,在這個過程當中,產生了一個egg對象,有本身具體的名字、攻擊力和生命值。
語法:對象名 = 類名(參數)
egg = Person('egon') #類名()就等於在執行Person.__init__() #執行完__init__()就會返回一個對象。這個對象相似一個字典,存着屬於這我的自己的一些屬性和方法。 #你能夠偷偷的理解:egg = {'name':'egon','walk':walk}
(3)查看屬性&調用方法
print(egg.name) #查看屬性直接 對象名.屬性名
print(egg.walk()) #調用方法,對象名.方法名()
(4)關於self
self:在實例化時自動將對象/實例自己傳給__init__的第一個參數,你也能夠給他起個別的名字,可是正常人都不會這麼作。
(5)類屬性補充
一:咱們定義的類的屬性到底存到哪裏了?有兩種方式查看 dir(類名):查出的是一個名字列表 類名.__dict__:查出的是一個字典,key爲屬性名,value爲屬性值 二:特殊的類屬性 類名.__name__# 類的名字(字符串)
類名.__doc__# 類的文檔字符串
類名.__base__# 類的第一個父類(在講繼承時會講)
類名.__bases__# 類全部父類構成的元組(在講繼承時會講)
類名.__dict__# 類的字典屬性
類名.__module__# 類定義所在的模塊
類名.__class__# 實例對應的類(僅新式類中)
(6)總結
class 類名: def __init__(self,參數1,參數2): self.對象的屬性1 = 參數1 self.對象的屬性2 = 參數2 def 方法名(self):pass
def 方法名2(self):pass 對象名 = 類名(1,2) #對象就是實例,表明一個具體的東西
#類名() : 類名+括號就是實例化一個類,至關於調用了__init__方法
#括號裏傳參數,參數不須要傳self,其餘與init中的形參一一對應
#結果返回一個對象
對象名.對象的屬性1 #查看對象的屬性,直接用 對象名.屬性名 便可
對象名.方法名() #調用類中的方法,直接用 對象名.方法名() 便可