一、面向過程:
面向過程的程序設(shè)計(jì)的核心是過程(流水線式思維),過程即解決問題的步驟,面向過程的設(shè)計(jì)就好比精心設(shè)計(jì)好一條流水線,考慮周全什么時候處理什么東西。
==優(yōu)點(diǎn):== 極大地降低了寫成學(xué)的復(fù)雜度,只需要順著執(zhí)行的步驟,堆疊代碼即可
==缺點(diǎn):== 一套流水線或者流程就是用來解決一個問題,如果修改代碼就都得改變
二、面向?qū)ο螅荷系鄣乃枷?/h2>
==優(yōu)點(diǎn):== 解決了程序的擴(kuò)展性。對某一個對象單獨(dú)修改,會立刻反映到整個體系中,如對游戲中一個人物參數(shù)的特征和技能修改都很容易。
==缺點(diǎn):== 可控性差,無法向面向過程的程序設(shè)計(jì)流水線式的可以很精準(zhǔn)的預(yù)測問題的處理流程與結(jié)果,面向?qū)ο蟮某绦蛞坏╅_始就由對象之間的交互解決問題,即便是上帝也無法預(yù)測最終結(jié)果。于是我們經(jīng)??吹揭粋€游戲人某一參數(shù)的修改極有可能導(dǎo)致陰霸的技能出現(xiàn),一刀砍死3個人,這個游戲就失去平衡。
三、類:是具有相同特征的一類事物(人,狗,老虎)
對象/實(shí)例:具體的某一事物
實(shí)例化:類到對象的過程(實(shí)例=類名(參數(shù)1,參數(shù)2))
四、初始類和對象
類的定義:
class Person: #class 類名:
#注意類名后面不要括號
類體
在python中,用變量表示特征,用函數(shù)表示技能,因而具有相同的特征和技能的一類事物就是‘類’,
對象則是這一類事物中具體的一個
==類的兩種作用:== 屬性引用和實(shí)例化
屬性引用:
class Person:
role = '中國人' #類屬性----靜態(tài)屬性
def walk(self): #這里的函數(shù)叫做方法-----動態(tài)屬性
#注意:self必須寫
print('person is walking ...')
print(Person.role) #查看類屬性
print(Person.walk) #查看類方法 , 用類名去調(diào)用方法名,打印出來的是內(nèi)存地址
實(shí)例化:
class Person:
role = '中國人'
def __init__(self,name,sex):
self.name=name
self.sex=sex
def walk(self):
print('person is walking')
p= Person('腿姐',21) #實(shí)例化:類名(參數(shù)1,參數(shù)2) 類名()就等于在執(zhí)行Person.__init__()
print(p.name) #直接查看屬性 對象名.屬性名
print(p) #返回的是一個對象
p.walk() #調(diào)用方法 ,對象名.方法()
==對象的兩種作用:查看屬性和調(diào)用方法(咋上面的實(shí)例化中講到)==
五、關(guān)于self
self:在實(shí)例化時自動將對象/實(shí)例本身傳給init的第一個參數(shù),你也可以給它起個別的名字,但是一般正常人都不會這么做,因?yàn)槟愀牧藙e人就不認(rèn)識了。
注意:def init(self): 這句話可以寫也可以不寫,只要有參數(shù)參進(jìn)來的時候就必須得寫
class Person:
def eat(self):
#這里的self必須得寫
pass
六、特殊的類屬性
class Person:
role = '中國人'
def __init__(self,name,sex):
self.name=name
self.sex=sex
def walk(self):
print('person is walking')
p= Person('腿姐',21) #實(shí)例化一個對象
print(Person.__name__,type(Person.__name__)) #查看類的名字(這里的類名是字符串類型的)
print(Person.__dict__) #查出的是一個字典,key為屬性名,value為屬性值
print(Person.__doc__)## 就是把注釋顯示出來
print(dir(Person)) #查看類的方法,以列表的形式顯示出來
print(Person.__module__) #類定義所在的模塊
print(Person.__class__)
print(isinstance(p,Person))#判斷對象 是否是類的實(shí)例
七、對象的相關(guān)知識
1.對象是關(guān)于類而實(shí)際存在的一個例子,即實(shí)例
2.對象/實(shí)例只有一種作用:屬性引用
egg = Person('egon',10,1000)
print(egg.name)
print(egg.aggressivity)
print(egg.life_value) #當(dāng)然,你也可以引用一個方法,因?yàn)榉椒ㄒ彩且粋€屬性。
八、面向?qū)ο笮〗Y(jié)
定義及調(diào)用的固定格式
class 類名:
def __init__(self,參數(shù)1,參數(shù)2):
self.對象的屬性1 = 參數(shù)1
self.對象的屬性2 = 參數(shù)2
def 方法名(self):
pass
def 方法名2(self):
pass
九、對象之間的交互
人狗大戰(zhàn)小程序
class Person:
def __init__(self,name,aggr,life_value):
self.name=name
self.aggr=aggr
self.life_value=life_value
def attack(self,dog): #人可以攻擊狗
dog.life_value=dog.life_value-self.aggr
class Dog:
def __init__(self,name,aggr,life_value):
self.name = name
self.aggr = aggr
self.life_value = life_value
def attack(self,egg): #狗也可以攻擊人
egg.life_value = egg.life_value - self.aggr
egg = Person('egon',250,1000) #示例化一個人呢
dog = Dog('樂樂',50,2000) #實(shí)例化一個狗
print('狗沒攻擊前egon的生命值:',dog.life_value) #沒攻擊前egon的生命值
egg.attack(dog) #讓egon去攻擊狗樂樂
print('狗攻擊后egon的生命值:',dog.life_value) #攻擊后egon的生命值
print('egon沒攻擊前狗的生命值:',egg.life_value) #沒攻擊前egon的生命值
dog.attack(egg) #讓狗去攻擊egon
print('egon攻擊后狗的生命值:',egg.life_value) #攻擊后egon的生命值
十、類命名空間與對象,實(shí)例的命名空間
創(chuàng)建一個類就會創(chuàng)建一個類的名稱空間,用來存儲類中定義的所有名字,這些名字成為類的屬性
而類有兩種屬性:靜態(tài)屬性和動態(tài)屬性
- 靜態(tài)屬性就是直接在類中定義的變量
- 動態(tài)屬性就是定義在類中的方法