一耀盗、初識面向?qū)ο?/h1>
函數(shù)編程的優(yōu)缺點(diǎn):
優(yōu)點(diǎn):
減少代碼的重復(fù)性
增強(qiáng)代碼的可閱讀性
缺點(diǎn):
- 但凡更改或者增加一條需求,可能整個項目都隨之改變.
面向?qū)ο缶幊痰膬?yōu)點(diǎn):
是一類相似功能函數(shù)的集合,使你的代碼更清晰化,更合理化卦尊。
面向?qū)ο笈芽剑獡碛猩系鄣囊暯强磫栴},類其實(shí)就是一個公共模板(廠房)岂却,對象就從具體的模板實(shí)例化出來
什么是類忿薇?什么是對象?
類:就是具有相同屬性和功能的一類事物淌友。
對象:就是類的具體表現(xiàn)
類和對象之間的關(guān)系:
類:
是一個大范圍,是一個模子,它約束了事務(wù)有哪些屬性,但是不能約束具體的值,只有兩部分變量和函數(shù)
對象:
是一個具體的內(nèi)容,它是模子的產(chǎn)物,它遵循了類的約束,同時給屬性賦上了具體的值
類的格式:
class Student: #類名
daily = '學(xué)習(xí)' #1??屬性,靜態(tài)屬性
exam = '考試'
def work(self): #2??方法,動態(tài)方法
print('每天上課')
def homework(self):
print('家庭作業(yè)')
類的格式詳解:
class Person: #類名可以隨便定義,大寫開頭,要具有可描述性,建議使用駝峰體
def __init__(self,name,sex,job,hb,weapon,ad): # 這個其實(shí)就是一個字典
self.name = name #名字可以不相同
self.sex = sex
self.job = job
self.hb = hb
self.weapon = weapon
self.ad = ad
alex = Person('alex', '不詳', '搓澡工', 250, '搓澡', 1) #給類名傳參
wusir = Person('wusir', '男', '法師', 500, '打狗棍', 1000)
# 調(diào)用
print(alex.__init__) # 可以查看整個alex的字典
# 輸出結(jié)果如下
{'name': 'alexsb', 'sex': '不詳', 'job': '搓澡工', 'hb': 250, 'weapon': '搓澡', 'ad': 1}
class 是關(guān)鍵字與def用法相同煌恢,定義一個類。
Human是此類的類名震庭,類名使用駝峰(CamelCase)命名風(fēng)格瑰抵,首字母大寫,私有類可用一個下劃線開頭
preson是一個類: Alex wusir都是這個類的對象
類有一個空間,存儲的是定義在class中的所有名字
每一個對象又擁有自己的空間,通過對象名.__dict__
就可以查看這個對象的屬性和值
二器联、從類名的角度研究類
查看類名角度調(diào)用類中的屬性
1. 查看類中的所有內(nèi)容 類名.__dict__只用于獲取類中全部內(nèi)容
print(Student.__dict__)
2. 萬能的.點(diǎn). 來進(jìn)行增刪改查
類名操作靜態(tài)屬性
class Student:
daily = '學(xué)習(xí)'
exam = '考試'
def work(self):
print('每天上課')
def homework(self):
print('家庭作業(yè)')
# 通過操作類名的增刪改查
print(Student.daily) #1??查看類屬性
Student.cloth = '校服' #2??增加類屬性
Student.exam = '不考試' #3??修改類屬性
del Student.cloth #4??刪除類屬性
print(Student.__dict__) #5??查看類名Student中全部內(nèi)容
類的實(shí)例化過程方法
#方法 6??類名+括號
obj = Student() # 類名加括號過程就叫做實(shí)例化過程
print(obj) # 對象,實(shí)例,結(jié)果是一個對象的內(nèi)存地址
三. 從對象的角度研究類
什么是對象
對象是從類中出來的二汛,只要是類名加上(),這就是一個實(shí)例化過程拨拓,這個就會實(shí)例化一個對象
對象名操作動態(tài)方法
增:
# 1??屬性的增加
alex.money = 1000000
# 還以上面格式為例
# 打印該對象增加值之前
print(alex.__dict__)
# 輸出結(jié)果
{'name': 'alexsb', 'sex': '不詳', 'job': '搓澡工', 'hb': 250, 'weapon': '搓澡', 'ad': 1}
# 打印該添加屬性后的對象
print(alex.__dict__)
# 輸出字結(jié)果
{'name': 'alexsb', 'sex': '不詳', 'job': '搓澡工', 'hb': 250, 'weapon': '搓澡', 'ad': 1, 'money': 1000000}
刪
# 2??屬性的刪除
del alex.money
# 打印刪除字典鍵值對之后
{'name': 'alexsb', 'sex': '不詳', 'job': '搓澡工', 'hb': 250, 'weapon': '搓澡', 'ad': 1}
改
# 3??屬性的修改
alex.name = 'alex'
# 打印修改之后的結(jié)果
{'name': 'alex', 'sex': '不詳', 'job': '搓澡工', 'hb': 250, 'weapon': '搓澡', 'ad': 1}
查
# 4??屬性的查詢
print(alex.name)
# 查對象
print(alex.__dict__)
# 打印查詢的結(jié)果
alex
四肴颊、實(shí)例化一個對象
實(shí)例化一個對象總共發(fā)生了三件事
1. 在內(nèi)存中開辟了一個對象空間。
2. 自動執(zhí)行類中的__init__
方法渣磷,并將這個對象空間(內(nèi)存地址)傳給了__init__
方法的第一個位置參數(shù)self婿着。
3. 在__init__
方法中通過self給對象空間添加屬性。
格式:
class Student:
daily = '學(xué)習(xí)'
exam = '考試'
def __init__(self,n,a,h): #類 可以當(dāng)做一個模板 1??給這個設(shè)置形參
self.name = n
self.age = a
self.hobby = h
def work(self):
print('每天上課')
def homework(self):
print('家庭作業(yè)')
liye = Student('小黑',18,'洗頭') #2??傳參,然后定義一個變量接收
print(liye.__dict__)
mc_sq = Student('騷強(qiáng)',20,'黑玫瑰發(fā)廊') #3??傳另外一個參,然后定義一個變量接收
對象調(diào)用對象的屬性
liye = Student('小黑',18,'洗頭') #實(shí)例化過程
mc_sq = Student('騷強(qiáng)',20,'黑玫瑰發(fā)廊') #實(shí)例化過程
print(liye.name) #1??對象調(diào)用對象的屬性
print(mc_sq.age) #2??對象調(diào)用對象的屬性
# 輸出結(jié)果
小黑
20
對象調(diào)用類中的屬性
print(mc_sq.__dict__) #1??調(diào)用對象中的全部內(nèi)容
print(liye.daily) #2??對象調(diào)用類中的屬性
print(mc_sq.exam) #3??對象調(diào)用類中的屬性
# 輸出結(jié)果
{'name': '騷強(qiáng)', 'age': 20, 'hobby': '黑玫瑰發(fā)廊'}
學(xué)習(xí)
考試
對象調(diào)用類中的方法
class Student:
daily = '學(xué)習(xí)'
exam = '考試'
def __init__(self,n,a,h): #1??實(shí)例化過程將值傳入到這個 方法中
self.name = n
self.age = a
self.hobby = h
def work(self,c): #2??對象調(diào)用類中的方法,self指向同一個內(nèi)存地址
self.color = c
print(f'{self.name}每天上課')
def homework(self):
print('家庭作業(yè)')
liye = Student('小黑',18,'洗頭') #實(shí)例化過程
liye.work('綠油油') #3??給類中方法傳值,傳給word方法中的c,self共用同一個內(nèi)存liye
print(liye.__dict__) #查看對象的全部內(nèi)容
# 輸出結(jié)果
liye.work('綠油油')
print(liye.__dict__)
五、什么是self?
- self就是類中的方法的第一個位置參數(shù)
- 如果通過對象執(zhí)行此方法,解釋器就自動的將此對象空間當(dāng)做實(shí)參傳給self
- 約定俗成:類中的方法第一個參數(shù)一般都設(shè)置成self
六竟宋、一個類可以實(shí)例化多個對象
例題:
# 人狗大戰(zhàn)
# 人的類
class Person:
def __init__(self,name,sex,job,hp,weapon,ad):
self.name = name
self.sex = sex
self.job = job
self.level = 0
self.hp = hp
self.weapon = weapon
self.ad = ad
def 搓(self,dog):
dog.hp -= self.ad
print('%s給%s搓了澡,%s掉了%s點(diǎn)血,%s當(dāng)前的血量%s'%(self.name,dog.dog_name,dog.dog_name,self.ad,dog.dog_name,dog.hp))
# 狗的類
class Dog():
def __init__(self,name,hp,ad,kind):
self.dog_name = name
self.hp = hp
self.ad = ad
self.kind = kind
def 添(self,person):
if person.hp >= self.ad:
person.hp -= self.ad
else:
person.hp = 0
print('%s添了%s一下,%s掉了%s點(diǎn)血,%s當(dāng)前的血量%s'%(self.dog_name,alex.name,alex.name,self.ad,alex.name,person.hp))
alex = Person('alex', '不詳', '搓澡工', 250, '搓澡巾', 1)
二哈 = Dog('二哈',100,2000,'哈士奇')
alex.搓(二哈)
二哈.添(alex)