編程思想
面向過程編程(思想)
流水線形式
優(yōu)點(diǎn):邏輯清晰
(邏輯一步一步的,是一個(gè)系統(tǒng))
缺點(diǎn):擴(kuò)展性差
(上一個(gè)函數(shù)的輸出是下一個(gè)函數(shù)的輸入)
面向?qū)ο缶幊蹋ㄋ枷耄?/h3>
對象是什么?
Python中一切皆對象
對象:就是特征和技能的結(jié)合體。
面向?qū)ο缶幊蹋憾x初一個(gè)個(gè)鮮明獨(dú)特的對象,然后通過對象之間的交互編程。
優(yōu)點(diǎn):擴(kuò)展性非常強(qiáng)
缺點(diǎn):邏輯非常復(fù)雜
類和對象
以選課系統(tǒng)為例
定義學(xué)生對象:
姓名:小明
學(xué)號:123456
學(xué)校:oldboy
技能:選課
姓名:小紅
學(xué)號:123457
學(xué)校:oldboy
技能:選課
定義老師對象:
姓名:李老師
學(xué)校:oldboy
技能:教課
姓名:張老師
學(xué)校:oldboy
技能:教課
類:分類/類別
按照學(xué)生和老師可以劃分兩類,一個(gè)是學(xué)生類,一個(gè)是老師類
類的概念:一系列具有共同特征或技能的對象。
在現(xiàn)實(shí)世界中先有對象,再有類。
在Python中先有類,再有對象。
用Python定義一個(gè)類
定義類,會直接運(yùn)行類體代碼
class 類明(必須得用駝峰體):
定義一系列特征
定義一系列方法
實(shí)例化對象
對象 = 類名()
# 類的定義階段,會運(yùn)行代碼
class OldBoyStudent:
school = 'oldboy'
# self是對象本身
# __開頭的方法會在某種情況自動(dòng)調(diào)用
# __init__在類實(shí)例化的時(shí)候自動(dòng)調(diào)用
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
# 函數(shù)定義階段,只檢測語法,不執(zhí)行代碼
def choose_cource(self):
print('is choosing cource')
# 雙下劃線開頭的方法會在某種情況下自動(dòng)觸發(fā)
print(OldBoyStudent.__dict__)
# 實(shí)例化對象
stu1 = OldBoyStudent('jack','18','male')
print(stu1.school)
print(stu1.choose_cource())
stu2 = OldBoyStudent()
print(stu2.school)
print(stu2.choose_cource())
對象的屬性查找順序
先從對象本身查找,然后從類中查找,類也沒有則報(bào)錯(cuò)。
類與數(shù)據(jù)類型
所有的數(shù)據(jù)類型都是類。
對象的高度整合
對象會有一大堆屬性/數(shù)據(jù),還會有一大推方法來適應(yīng)操作這些屬性,然后對于不同的對象,這些屬性又不同。
類的繼承
繼承是一種新建類的方式,新建的類稱為子類,被繼承的類稱為父類。
在Python當(dāng)中,父類、子類(派生類),父類和子類只有在繼承的時(shí)候才會產(chǎn)生。
class Parent_Foo:
def __init__(self, first_name, money, car, house):
self.first_name = first_name
self.money = money
self.car = car
self.house = house
def fine_wife(self):
print(f'{self.first_name}先生找到妻子了')
# pf = Parent_Foo('jack', 5, 'tesla', '1套')
class Son_Foo(Parent_Foo):
pass
sf = Son_Foo('jack', 1000, 'tesla', '1套')
print(sf.first_name)
print(sf.money)
print(sf.car)
print(sf.house)
sf.fine_wife()
為什么要使用繼承?
減少重復(fù),所有的父親都可以用這個(gè)類,隔離了復(fù)雜度。
不推薦使用繼承,當(dāng)繼承多個(gè)的時(shí)候,功能與功能之間會混亂,頂過繼承一個(gè)。
繼承后查找順序,先自己,再類,再父類,再父類的父類·······
繼承就是為了使用父類的屬性。
類的派生
添加新的屬性,同時(shí)還繼承父類的所有東西。
方法一:直接使用
類名.__init__()
方法二:使用繼承的方法
supper().__init__()
派生:繼承父類的屬性同時(shí)增加新的屬性,然后使用supper().init()
類的組合
組合:組合在一起。
把對象當(dāng)作變量值來用,當(dāng)作形參/實(shí)參/返回值。
菱形繼承問題
在python3當(dāng)中會默認(rèn)繼承object類;在python2當(dāng)中不會默認(rèn)繼承object類,必須得手動(dòng)添加。
新式類:只要繼承了object類的就是新式類,python3當(dāng)中所有的類都是新式類。
經(jīng)典類:沒有繼承object類就是經(jīng)典類,只有python2當(dāng)中有經(jīng)典類。
當(dāng)繼承為菱形繼承的時(shí)候,經(jīng)典類和新式類搜索某一個(gè)屬性的順序會不一樣。
在新式類中,當(dāng)遇到菱形繼承時(shí),會以廣度優(yōu)先查找。
在經(jīng)典類中,當(dāng)遇到菱形繼承時(shí),會以深度優(yōu)先查找。文章來源:http://www.zghlxwxcb.cn/news/detail-814365.html
多態(tài)與多態(tài)性
多態(tài):多種狀態(tài),只要大家能繼承同一種東西A,這些東西就是A 的多態(tài)。
水:液態(tài)/固態(tài)/氣態(tài)
不推薦使用文章來源地址http://www.zghlxwxcb.cn/news/detail-814365.html
到了這里,關(guān)于【python學(xué)習(xí)】面向?qū)ο缶幊?的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!