国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

python之lazy property

SoapEye / 2347人閱讀

摘要:今天看文章看到一個很神奇的東西,那就是文章之主題。中的符裝飾被裝飾了。。。當?shù)谝淮螆?zhí)行的時候先被類初始化并賦給其實例變量然后再被函數(shù)執(zhí)行并將返回值賦給變量,被通過內(nèi)置函數(shù)將屬性加入實例中,最后返回。

今天看文章看到一個很神奇的東西,那就是文章之主題——lazy property。自己也百度了好幾篇文章,琢磨了一會兒才明白其中之奧秘,分享給大家。
python中的@符

def outter(func):
    def inner(*args, **kwargs):
        print("裝飾a....")
        re=func(*args, **kwargs)
        return re   

    return inner
@outter
def a():
    print("被裝飾了。。。")

a()

上面一段裝飾器的代碼,相信大家都明白其原理,通過裝飾器a指向了outter的返回值,也就是其內(nèi)部函數(shù)inner,然后調(diào)用a,其實調(diào)用的是被裝飾后的函數(shù)。那么接下來,引入我們今天的話題lazy property.

class lazy(object):
    def __init__(self, func):
        self.func = func
 
    def __get__(self, instance, cls):
        val = self.func(instance)    #其相當于執(zhí)行的area(c),c為下面的Circle對象
        setattr(instance, self.func.__name__, val)
        return val
 
class Circle(object):
    def __init__(self, radius):
        self.radius = radius
 
    @lazy
    def area(self):
        print("evalute")
        return 3.14 * self.radius ** 2
 
c = Circle(4)
print(c.area)
print(c.area)
print(c.area)   #三次的結(jié)果都是:50.24

上面的代碼引用自飄逸的python,其不僅用到了我們上面的@符作用,更是用到了昨天講的屬性描述器。當?shù)谝淮螆?zhí)行的時候先被lazy類初始化并賦給其實例變量func,然后再被__get__函數(shù)執(zhí)行并將返回值賦給變量val,被通過python內(nèi)置函數(shù)setter()將area屬性加入c實例中(c.__dict__),最后返回val。這種方式可以簡化我們的計算操作。
最后給大家擴展一個小知識點(見名之意我就不多嘴了):
setter(object,name,value)
getter(object,name, not_exists_value)
hasattr(object,name)
只想踏踏實實的學(xué)好一門語言,有不足的地方,大家多多留言提出來,謝謝了。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/42769.html

相關(guān)文章

  • Python 延遲初始化(lazy property

    摘要:延遲初始化主要用于提高性能,避免浪費計算,并減少程序的內(nèi)存需求。實現(xiàn)延遲初始化有兩種方式,一種是使用描述符,另一種是使用修飾符。 Python 對象的延遲初始化是指,當它第一次被創(chuàng)建時才進行初始化,或者保存第一次創(chuàng)建的結(jié)果,然后每次調(diào)用的時候直接返回該結(jié)果。 延遲初始化主要用于提高性能,避免浪費計算,并減少程序的內(nèi)存需求。 property 在切入正題之前,我們了解下property的...

    J4ck_Chan 評論0 收藏0
  • Python中類的屬性具有惰性求值的能力

    摘要:更多描述可見文檔這種惰性求值的方法在很多模塊中都會使用,比如中的使用上與例子一致,如表單中的討論在大部分情況下,讓屬性具有惰性求值能力的全部意義就在于提升程序性能。當不需要這個屬性時就能避免進行無意義的計算,同時又能阻止該屬性重復(fù)進行計算。 起步 我們希望將一個只讀的屬性定義為 property 屬性方法,只有在訪問它時才進行計算,但是,又希望把計算出的值緩存起來,不要每次訪問它時都重...

    NervosNetwork 評論0 收藏0
  • vue源碼分析系列響應(yīng)式數(shù)據(jù)(三)

    摘要:并在內(nèi)執(zhí)行了函數(shù),在函數(shù)內(nèi)部,訪問了。至此知道了它依賴于。需要根據(jù)最新的計算。本例中收集到了依賴并且也被告知觀察了他們。文章鏈接源碼分析系列源碼分析系列之環(huán)境搭建源碼分析系列之入口文件分析源碼分析系列之響應(yīng)式數(shù)據(jù)一源碼分析系列之響應(yīng)式數(shù)據(jù)二 前言 上一節(jié)著重講述了initData中的代碼,以及數(shù)據(jù)是如何從data中到視圖層的,以及data修改后如何作用于視圖。這一節(jié)主要記錄initCo...

    shenhualong 評論0 收藏0
  • Hibernate的延遲加載

    摘要:非集合屬性非集合屬性的延遲加載相對比較復(fù)雜。僅通過注解是無法實現(xiàn)延遲加載的。但是在一對一關(guān)系中,延遲加載是有陷阱的。這樣一來,就會立即為配置延遲加載的實體生成一個動態(tài)代理類。 Hibernate中,延遲加載針對屬性類別可以分為兩類,一類是延遲屬性加載,另一類是延遲關(guān)聯(lián)實體加載。 屬性延遲加載 屬性有可以分為兩種類型:一種是集合屬性,一種是非集合屬性(如String、Integer……)...

    jollywing 評論0 收藏0
  • vue源碼響應(yīng)式數(shù)據(jù)

    摘要:分析是如何實現(xiàn)數(shù)據(jù)響應(yīng)的前記現(xiàn)在回顧一下看數(shù)據(jù)響應(yīng)的原因之前看了和的源碼他們都有自己內(nèi)部的也就是實例使用的都是的響應(yīng)式數(shù)據(jù)特性及所以決定看一下的源碼了解是如何實現(xiàn)響應(yīng)式數(shù)據(jù)本文敘事方式為樹藤摸瓜順著看源碼的邏輯走一遍查看的的版本為目的明確 分析vue是如何實現(xiàn)數(shù)據(jù)響應(yīng)的. 前記 現(xiàn)在回顧一下看數(shù)據(jù)響應(yīng)的原因. 之前看了vuex和vue-i18n的源碼, 他們都有自己內(nèi)部的vm, 也就是...

    learn_shifeng 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<