真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python裝飾器高級(jí)版—Python類內(nèi)定義裝飾器并傳遞self參數(shù)-創(chuàng)新互聯(lián)

本文重點(diǎn):解決了類里面定義的裝飾器,在同一個(gè)類里面使用的問題,并實(shí)現(xiàn)了裝飾器的類屬性參數(shù)傳遞

10年的吳堡網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都營(yíng)銷網(wǎng)站建設(shè)的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整吳堡建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)公司從事“吳堡網(wǎng)站設(shè)計(jì)”,“吳堡網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

目錄:

一、基本裝飾器

二、在類里定義裝飾器,裝飾本類內(nèi)函數(shù)

三、類裝飾器

正文:

一、基本裝飾器

        裝飾不帶參數(shù)的函數(shù)

def clothes(func):     def wear():         print('Buy clothes!{}'.format(func.__name__))         return func()     return wear @clothes def body():     print('The body feels could!')      #備注:@是語(yǔ)法糖 # 不用語(yǔ)法糖的情況下,使用下面語(yǔ)句也能實(shí)現(xiàn)裝飾作用:把body再加工,再傳給body # body = clothes(body)

        裝飾帶一個(gè)參數(shù)的函數(shù)

def clothes(func):     def wear(anything):            # 實(shí)際是定義一個(gè)anything參數(shù),對(duì)應(yīng)body函數(shù)參數(shù)         print('Buy clothes!{}'.format(func.__name__))         return func(anything)      # 執(zhí)行func函數(shù),并傳入調(diào)用傳入的anything參數(shù)         # wear = func(anything)    # 在這一步,實(shí)際上可以看出來,為啥wear必須帶參數(shù),因?yàn)樗褪莊unc(anything)     return wear     # 所以clothes的結(jié)果是     # clothes = wear = func(anything)     # 不用語(yǔ)法糖的情況下就是     # body = clothes(body)('hands')     # 進(jìn)一步證明:print(body.__name__)  顯示的是wear函數(shù)      @clothes def body(part):     print('The body feels could!{}'.format(part))      body('hands')

    裝飾帶不定長(zhǎng)參數(shù)的函數(shù)

    通常裝飾器不只裝飾一個(gè)函數(shù),每個(gè)函數(shù)參數(shù)的個(gè)數(shù)也不相同

    這個(gè)時(shí)候使用不定長(zhǎng)參數(shù)*args,**kwargs

def clothes(func):     def wear(*args, **kwargs):         print('Buy clothes!{}'.format(func.__name__))         return func(*args, **kwargs)     return wear @clothes def body(part):     print('The body feels could!{}'.format(part)) @clothes def head(head_wear, num=2):     print('The head need buy {} {}!'.format(num, head_wear)) body('hands') head('headdress')

    裝飾器帶參數(shù)

# 把裝飾器再包裝,實(shí)現(xiàn)了seasons傳遞裝飾器參數(shù)。 def seasons(season_type):     def clothes(func):         def wear(*args, **kwargs):             if season_type == 1:                 s = 'spring'             elif season_type == 2:                 s = 'summer'             elif season_type == 3:                 s = 'autumn'             elif season_type == 4:                 s = 'winter'             else:                 print('The args is error!')                 return func(*args, **kwargs)             print('The season is {}!{}'.format(s, func.__name__))             return func(*args, **kwargs)         return wear     return clothes @seasons(2) def children():     print('i am children') children()



二、在類里定義裝飾器,裝飾本類內(nèi)函數(shù):

類裝飾器,裝飾函數(shù)和類函數(shù)調(diào)用不同的類函數(shù)

    把裝飾器寫在類里

        在類里面定義個(gè)函數(shù),用來裝飾其它函數(shù),嚴(yán)格意義上說不屬于類裝飾器。

class Buy(object):     def __init__(self, func):         self.func = func     # 在類里定義一個(gè)函數(shù)     def clothes(func):            # 這里不能用self,因?yàn)榻邮盏氖莃ody函數(shù)         # 其它都和普通的函數(shù)裝飾器相同         def ware(*args, **kwargs):             print('This is a decrator!')             return func(*args, **kwargs)         return ware @Buy.clothes def body(hh):     print('The body feels could!{}'.format(hh)) body('hh')

    裝飾器裝飾同一個(gè)類里的函數(shù)

背景:想要通過裝飾器修改類里的self屬性值。

class Buy(object):     def __init__(self):         self.reset = True        # 定義一個(gè)類屬性,稍后在裝飾器里更改         self.func = True              # 在類里定義一個(gè)裝飾器     def clothes(func):    # func接收body         def ware(self, *args, **kwargs):    # self,接收body里的self,也就是類實(shí)例             print('This is a decrator!')             if self.reset == True:        # 判斷類屬性                 print('Reset is Ture, change Func..')                 self.func = False        # 修改類屬性             else:                 print('reset is False.')             return func(self, *args, **kwargs)         return ware     @clothes     def body(self):         print('The body feels could!') b = Buy()    # 實(shí)例化類 b.body()     # 運(yùn)行body print(b.func)    # 查看更改后的self.func值,是False,說明修改完成

三、類裝飾器

    定義一個(gè)類裝飾器,裝飾函數(shù),默認(rèn)調(diào)用__call__方法

#  class Decrator(object):     def __init__(self, func):                        # 傳送的是test方法         self.func = func     def __call__(self, *args, **kwargs):      # 接受任意參數(shù)             print('函數(shù)調(diào)用CALL')             return self.func(*args, **kwargs)    # 適應(yīng)test的任意參數(shù)         @Decrator                        # 如果帶參數(shù),init中的func是此參數(shù)。 def test(hh):     print('this is the test of the function !',hh) test('hh')

    定義一個(gè)類裝飾器,裝飾類中的函數(shù),默認(rèn)調(diào)用__get__方法

    實(shí)際上把類方法變成屬性了,還記得類屬性裝飾器吧,@property

    下面自已做一個(gè)property

class Decrator(object):     def __init__(self, func):         self.func = func     def __get__(self, instance, owner):         '''         instance:代表實(shí)例,sum中的self         owner:代表類本身,Test類                  '''         print('調(diào)用的是get函數(shù)')         return self.func(instance)     # instance就是Test類的self class Test(object):     def __init__(self):         self.result = 0     @Decrator     def sum(self):         print('There is the Func in the Class !') t = Test() print(t.sum)            # 眾所周知,屬性是不加括號(hào)的,sum真的變成了屬性

    做一個(gè)求和屬性sum,統(tǒng)計(jì)所有輸入的數(shù)字的和

class Decrator(object):     def __init__(self, func):         self.func = func     def __get__(self, instance, owner):         print('調(diào)用的是get函數(shù)')         return self.func(instance) class Test(object):     def __init__(self, *args, **kwargs):         self.value_list = []         if args:             for i in args:                 if str(i).isdigit():                     self.value_list.append(i)         if kwargs:             for v in kwargs.values():                 if str(v).isdigit():                     self.value_list.append(v)     @Decrator     def sum(self):         result = 0         print(self.value_list)         for i in self.value_list:             result += i         return result t = Test(1,2,3,4,5,6,7,8,i=9,ss=10,strings = 'lll') print(t.sum)

    

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


網(wǎng)頁(yè)標(biāo)題:Python裝飾器高級(jí)版—Python類內(nèi)定義裝飾器并傳遞self參數(shù)-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)網(wǎng)址:http://weahome.cn/article/dsihsj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部