亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

python基礎之面向對象(14)

系統 1560 0

裝飾器是什么?
定義:裝飾器是用于拓展原函數功能的一種語法,返回新函數替換舊函數
作用:在不更改原函數代碼的前提下,拓展出新功能
@語法:加上@符 系統會自動把下面的函數當成參數傳遞到裝飾器中,從下到上.
@符又被稱作語法糖
裝飾器:

1.普通裝飾器

def decor(func):
def inner():
print(“財務拿錢買貨”)
func()
print(“賣貨的錢還回來”)
return inner
@decor #效果等同于sell=decor(sell)
def sell():
print(“買到貨出去賣”)
sell()

2.裝飾帶有參數的函數
def decor(func):
def inner(*val1,**val2):
print(“財務拿錢買貨”)
func(*val1,**val2)
print(“賣貨的錢還回來”)
return inner
@decor
def sell(*val1,**val2):
for i,j in val2.items():
print(“賣的貨里面有{}”.format(val1),‘它們的類型有{}’.format(i),“價格在{}”.format(j))
sell(“布娃娃”,“洋娃娃”,“金剛芭比”,可愛型=“100元”,冷酷型=“200元”)

3.裝飾帶有返回值的函數

def decor(func):
def inner():
print(“財務拿錢買貨”)
res=func()#接收sell函數里的返回值"賣布娃娃"
print(“賣貨的錢還回來”)
return res #將"賣布娃娃""作為返回值
return inner

@decor #效果等同于sell=decor(sell)
def sell():
print(“買到貨出去賣”)
return “賣布娃娃”
res=sell()
print(res)#打印返回值

4.帶有參數的裝飾器(不同函數不同效果)

def out(name): # 這個只是一個接收name參數的殼子,因為decor(func)已經有一個參數了
def decor(func):
def inner():
func()
if name == ‘屌絲’:
print(“老娘沒空鳥你”)
if name == “富帥”:
print(“在的呢,有空有空”)
return inner
return decor
@out(“屌絲”)
def diaosi():
print(“女神有空嗎”)
diaosi()

@out(“富帥”)
def fushuai():
print(“有空嗎”)
fushuai()

多個裝飾器同時出現的情況,執行順序是什么樣的呢?
多個裝飾器的調用順序是自下往上,但是運行時的執行順序是自上往下

def decor1(func):
def inner():
print(“一號技師”)
func()
print(“一號技師結束”)
return inner

def decor2(func):
def inner():
print(“二號技師”)
func()
print(“二號技師結束”)
return inner
@decor1
@decor2
def mashaji():
print(“馬殺雞真舒服”)
mashaji()

#結果為
一號技師
二號技師
馬殺雞真舒服
二號技師結束
一號技師結束
#自下而上,mashaji函數先被decor2裝飾器裝飾成新的函數即(decor2中的inner函數),新的函數再被傳到decor1裝飾器裝飾成更新的函數.

def decor1(func):
def inner(func2):
print(“一號技師”)
res=func(func2)
print(“一號技師結束”)
return(res)
return inner
@decor1
def decor2(func):
print(“一號技師技術真好”)
def inner2():
print(“二號技師”)
func()
print(“二號技師結束”)
return inner2
@decor2
def mashaji():
print(“馬殺雞真舒服”)
mashaji()

#結果
一號技師
一號技師技術真好
一號技師結束
二號技師
馬殺雞真舒服
二號技師結束
#1.代碼怎么樣不報錯:decor2先被decor1修飾器修飾,decor2(func)作為參數傳入decor1的func中,將decor2(func)視作普通的有參數的被裝飾函數,則decor1中的inner()和func()需要補對應的參數進去.又decor2(func)在decor1的func(func2)中被執行,返回值為inner2,在decor1中用res去接收返回值并作為decor1中的返回值.
2.執行順序問題,因decor2調入decor1時inner2只是一個返回值未輸出.所以只有等mashaji()調入decor2時才會輸出.

5.把類作為裝飾器(后面講)

6.裝飾類(后面講)
面向過程: Procedure Oriented
一種以過程為中心的編程思想。
就是分析出解決問題所需要的步驟,然后用函數把這些步驟一步一步實現,使用的時候一個一個依次調用就可以了。
面向對象:Object Oriented 簡稱OO
一種以事物為中心的編程思想。
是把構成問題事務分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。
換句話來說,面向對象是以功能來劃分問題,而不是步驟。

面向對象的學習: 面向對象的語法的學習 面對對象的思想的學習

面向對象的優勢: 能夠實現良好程序結構,方便程序的開發和管理維護!

效率:

運行效率:計算機 面向對象效率不如過程化的快
開發效率:程序員 面向對象比過程話開發要方便的多。 方便了程序員!

面向對象和面過程開發的區別:
【面向過程】:
吃飯 -> 自己做飯吃(調用做飯函數)
喝水 -> 自己倒水喝(調用了倒水函數)
洗衣服-> 自己洗衣服(調用了洗衣服函數)
睡覺 -> 自己拿睡衣(調用了拿睡衣的函數)

            
              去公司-> 走路去(調用走路函數)
去海南-> 走路去(調用走路函數)
送禮  -> 帶著禮物走去(調用走路運貨函數)
....

            
          

【面向對象】:
女朋友:
做飯功能
倒水功能
洗衣服功能
拿睡衣功能

            
              吃飯了->  女朋友,你給我做飯,謝謝
渴了  ->  女朋友,你給我倒一杯水,謝謝
洗衣服->  女朋友,幫我把衣服洗一洗
....

汽車:
    運動功能
    運貨功能
    兜風功能
    ...

            
          

去公司-> 汽車的運動功能…
去海南-> 汽車的運動功能或者兜風功能
送禮 -> 汽車的運貨功能

面向對象的結構特色:
高內聚(具有關聯的功能,總結在一個結構當中)
低耦合(沒有關聯的功能,放在不同的結構中)

面向的對象的單詞:
OO 面向對象
OOP 面向對象的開發 Object Oriented Programming
OOA 面向對象的分析 Object Oriented Analysis
OOD 面向對象的設計 Object Oriented Design
OOI 面向對象的實現 Object Oriented Implementation

OOA->OOD->OOI 面向對象程序開發的順序(OOP)

學習面向對象離不開兩個概念:類和對象

類:【類就是抽象的概念而已,(唯心主義)】
男人就是一個類
女人也是一個類
人類也是一個類
鳥類也是一個類
瓶子也是一個類
凳子也是一個類

以上內容都是一個簡單的名詞概念(語文)
【1.類是一個實物特征的集合,是一個抽象的名詞概念。】

開車是一個類 (打火,掛擋,離合,加油門,走你~)
打人也是一個類 (脫掉上衣,拿起磚頭,扔,趕快跑~)
做蛋糕是一個類 (和面,發酵,烘烤,切形狀…抹奶油,放水果,打包~)

以上內容都是一個動詞(語文)
【2.沒有具體實施的行為也是一個類,抽象的概念,存在與腦海中】
對象:【對象是具體的實物或者行為,(唯物主義)】
明星林志玲這個美女 就是一個對象
小豬佩奇這個角色 也是一個對象
我手上這臺電腦 也是一個對象
我現在坐著的這個凳子 也是一個對象

【1.對象是真真正正存在的實物,你看得見摸得著,不需要想象。】

我昨天開車去菜市場 就是一個對象
剛剛去做了個拉皮 也是一個對象
我給姐姐做了的生日蛋糕 這是一個對象

【2.真實發生過的行為就是對象,不需要想像,因為真的做了】
類和對象的關系:
都是面向對象開發中必不可少的內容。
1.類是由對象總結而來的。這個過程叫做抽象化
2.對象是由類具體實施而來。這個過程叫做實例化

創建文件:
習慣使用小寫字母當作文件名,可以使用下劃線進行分割。

類名的書寫規范:
使用駝峰命名法,
大駝峰: MyCar XiaoBaiTu…
小駝峰: myCar xiaoBaiTu…

類的組成:
女朋友:(類)
特征:性別女,膚白,貌美,大長腿…
sex = “女”
color = “皮膚白”
face = “貌美”
leg = “大長腿”

功能:洗衣,做飯,打掃衛生,陪…
def wash():
洗衣功能

            
              def cook():
    做飯功能

def clean():
    打掃衛生功能
...

            
          

類中內容只有2個:屬性和方法
屬性:用于描述特征的變量->成員屬性
方法:用于描述功能的函數->成員方法
也有一種說法:類中只有屬性

類的書寫規則:
1.聲明一個類必須使用class關鍵字
2.類名的聲明需要符合駝峰命名法(推薦)
3.類中只能存在兩種內容:屬性和方法,除此之外不允許出現其他內容
4.聲明成員屬性的時候,變量必須賦值
5.聲明成員方法的時候,按照函數聲明規范即可(參數中會自動添加self參數)

實例化對象:
對象變量 = 類名()

spl = GirlFriend()

python中有無數個數據類型,本質上所有的數據類型都是一個類

print(GirlFriend)
print(type(1))
print(type(GirlFriend()))
print(GirlFriend()) 只有這個輸出的是對象

獲取類和對象中所屬成員的信息
類:類名. dict
對象:對象名. dict

類成員的操作:(少用)
成員屬性:(和變量一樣)
訪問 類名.成員屬性名
修改 類名.成員屬性名 = 新值
刪除 del 類名.成員屬性名
添加 類名.成員屬性名 = 值

class Car():
wheel = 4
car_door = 4
color = “多種多樣”
def move(self):
print(“小汽車開起來,嘟嘟嘟”)
def load(self):
print(“一個車里有北京和上海的所有學員”)

car=Car() #實例化對象
print(Car.wheel) #使用類訪問成員屬性
print(Car. dict )#查看類的信息
Car.wheel=“黃色” #修改類的成員屬性
print(Car. dict )
del Car.wheel #刪除類的成員屬性
print(Car. dict )
Car.name=“奔馳”
print(Car. dict )

成員方法
訪問 類名.方法名(參數)
修改 類名.方法名 = 新的函數 (不要加括號)(注意:僅限了解,不推薦使用)
刪除 del 類名.方法名 (不要加括號)
添加 類名.新方法名 = 函數(也可以是lambda表達式)(注意:僅限了解,不推薦使用)

class Car():
wheel = 4
car_door = 4
color = “多種多樣”
def move(self):
print(“小汽車開起來,嘟嘟嘟”)
def load(self):
print(“一個車里有北京和上海的所有學員”)

Car.move(1)
print(Car. dict )
Car.move=lambda x:print(“我愛小汽車”)
print(Car. dict )
del Car.load
print(Car. dict )
Car.love=lambda x:print(“奔馳我要定了”)
print(Car. dict )

對象成員的操作:
成員屬性:
訪問 對象.成員屬性名
修改 對象.新成員屬性名 = 新值
添加 對象.成員屬性名 = 值
刪除 del 對象.成員屬性名 (必須是屬于當前對象的成員才可以)

class Car():
wheel = 4
car_door = 4
color = “多種多樣”
def move(self):
print(“小汽車開起來,嘟嘟嘟”)
def load(self):
print(“一個車里有北京和上海的所有學員”)

car=Car()
print(car.wheel)
print(car. dict )
car.wheel=“黃色” #先給對象添加屬性
print(car. dict )
car.wheel=“白色” #修改對象的屬性
print(car. dict )
del car.wheel
print(car. dict )
car.name=“奔馳”
print(car. dict )

成員方法:
訪問 對象.成員方法名()
修改 對象.成員方法名 = 新的函數(不要加括號)
添加 對象.成員方法名 = 函數 (不要加括號)
刪除 del 對象.成員方法名 (不要加括號)

class Car():
wheel = 4
car_door = 4
color = “多種多樣”
def move(self):
print(“小汽車開起來,嘟嘟嘟”)
def load(self):
print(“一個車里有北京和上海的所有學員”)
car=Car()
car.move()
print(car. dict )
car.move=lambda x:print(“我愛小汽車”) #添加對象方法
print(car. dict )
car.move=lambda x:print(“奔馳我要定了”) #修改對象方法
print(car. dict )
del car.move #刪除對象方法
print(car. dict )

1.實例化對象的時候通常情況下類中的成員不會在對象中復制一份
2.訪問對象成員的時候,只要沒有該成員,對象會向實例化他的類查找。
3.對象成員的添加和修改,都只會影響當前對象本身,不會影響類和其他對象
4.刪除對象成員時候,必須是該對象自身的成員才可以刪除,不可以刪除類和其他對象~


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 免费精品久久久久久中文字幕 | 久久大香香蕉国产免费网站 | 国产这里只有精品 | 亚洲欧美一区二区三区九九九 | h片在线播放免费高清 | 婷婷性 | 欧美一区二区在线播放 | 成 人 黄 色 视频播放1 | 久久永久免费 | 国产福利视频奶水在线 | 天天曰夜夜操 | 毛片免费全部播放一级 | 亚洲一区二区三区免费看 | 毛片毛片毛片毛片毛片毛片毛片 | 999精品久久久中文字幕蜜桃 | 国产第一页精品 | 亚洲区一二三四区2021 | 欧美三级美国一级 | 亚洲一区二区三区高清视频 | 日韩在线观看中文字幕 | 久久这里只有精品视频99 | 日韩亚洲欧洲在线rrrr片 | 日本特级| 中文字幕波多野不卡一区 | 青青热在线观看视频精品 | 成人网18免费网站在线 | 99热久久这里只有精品6 | 91在线免费播放 | 欧美日韩亚洲精品一区二区三区 | 久久久国产精品四虎 | 欧美高清不卡 | 亚洲精品国产综合99久久一区 | 国产一级影视 | 久久精品欧美日韩精品 | 久青草影院在线观看国产 | 2021精品综合久久久久 | 亚洲成人高清 | 欧美与黑人午夜性猛交久久久 | 一级寡妇乱色毛片全18 | 91亚洲免费 | 99热久久这里只有精品7 |