成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Python動(dòng)態(tài)特性應(yīng)對(duì)動(dòng)態(tài)情況

Vicky / 2617人閱讀

摘要:有一些定制類的特殊方法,如,其中一些具有動(dòng)態(tài)特性的方法可以用來(lái)很方便地處理某些動(dòng)態(tài)狀況。動(dòng)態(tài)化屬性和方法的調(diào)用,當(dāng)調(diào)用不存在的屬性時(shí),如果存在方法,就會(huì)調(diào)用方法來(lái)嘗試獲得屬性。這種完全動(dòng)態(tài)的調(diào)用可以應(yīng)對(duì)一些動(dòng)態(tài)情況,例如實(shí)現(xiàn)。

Python有一些定制類的特殊方法,如__str__()、__iter__()__getitem__(),其中一些具有動(dòng)態(tài)特性的方法可以用來(lái)很方便地處理某些動(dòng)態(tài)狀況。

Duck-typing

When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.

duck-typing是一種編程風(fēng)格,它的含義是:一個(gè)對(duì)象的語(yǔ)義,不是由于它繼承自特定的類或者實(shí)現(xiàn)某個(gè)接口,而是由它的屬性和方法的集合所決定。也就是說(shuō),我們?cè)谑褂靡粋€(gè)對(duì)象的時(shí)候,不在乎它是什么類型、是否實(shí)現(xiàn)了特定的接口,而是在意它有沒(méi)有我們需要的屬性和方法。
其實(shí)這就是在沒(méi)有語(yǔ)言約束的情況下來(lái)實(shí)現(xiàn)多態(tài),不像C++使用繼承和虛函數(shù)在語(yǔ)言上設(shè)置約束來(lái)實(shí)現(xiàn)多態(tài),所以就需要程序員來(lái)進(jìn)行約束,好的文檔、代碼、測(cè)試都是很需要的。
在用該風(fēng)格編碼時(shí)不要使用像type()、isintance()這樣的方法去測(cè)試函數(shù)中參數(shù)的類型,而是直接使用參數(shù)來(lái)表述行為,如果該參數(shù)沒(méi)有應(yīng)有的屬性或方法,就會(huì)報(bào)錯(cuò)。
使用__getitem__()來(lái)使自己的類表現(xiàn)得和Python內(nèi)建的list、tupledict一樣時(shí),就依靠了這種風(fēng)格,下面給出Wiki上關(guān)于duck-typing的Python示例代碼:

class Duck:
    def quack(self):
        print("Quaaaaaack!")
    def feathers(self):
        print("The duck has white and gray feathers.")

class Person:
    def quack(self):
        print("The person imitates a duck.")
    def feathers(self):
        print("The person takes a feather from the ground and shows it.")
    def name(self):
        print("John Smith")

def in_the_forest(duck):
    duck.quack()
    duck.feathers()

def game():
    donald = Duck()
    john = Person()
    in_the_forest(donald)
    in_the_forest(john)

game()

in_the_forest(duck)方法不管duck參數(shù)是Duck類型還是Person類型,只要該類型的實(shí)例由quack和feathers方法就可以。

動(dòng)態(tài)化屬性和方法的調(diào)用

__getattr__,當(dāng)調(diào)用不存在的屬性時(shí),如果存在__getattr__方法,就會(huì)調(diào)用__getattr方法來(lái)嘗試獲得屬性。

__call__,使實(shí)例本身變成可調(diào)用的。
這種完全動(dòng)態(tài)的調(diào)用可以應(yīng)對(duì)一些動(dòng)態(tài)情況,例如實(shí)現(xiàn)REST API。

class Chain(object):

    def __init__(self, path=""):
        self._path = path

    def __getattr__(self, path):
        return Chain("%s/%s" % (self._path, path))

    def __str__(self):
        return self._path

    def __call__(self, attr):
        return Chain("%s/%s" % (self._path, attr))

這樣我們就不用給每個(gè)URL對(duì)應(yīng)的API寫方法了,采用鏈?zhǔn)降恼{(diào)用就可以,如schools/status/users,就可以用Chain().schools.status.users。某些REST API會(huì)在URL中添加參數(shù),如/schools/users/ID/report,其中ID就是一個(gè)參數(shù),是某個(gè)學(xué)生實(shí)際的學(xué)號(hào),這時(shí)就可以利用__call__將對(duì)象變成可調(diào)用的,便可完成此功能,調(diào)用方式就是Chain().schools.users(ID).report。

參考資料

廖雪峰的Blog

Python官方文檔

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/45392.html

相關(guān)文章

  • 測(cè)試管理之項(xiàng)目軟件測(cè)試風(fēng)險(xiǎn)管理實(shí)踐

    摘要:在軟件測(cè)試活動(dòng)中,作為一名測(cè)試人員有沒(méi)有遇到過(guò)這樣的場(chǎng)景,在測(cè)試一個(gè)特性或者制定一份測(cè)試方案時(shí),往往會(huì)想著進(jìn)行簡(jiǎn)單測(cè)試做簡(jiǎn)單設(shè)計(jì),認(rèn)為這個(gè)場(chǎng)景出現(xiàn)的概率太低,幾乎不可能會(huì)存在,不測(cè)了實(shí)際應(yīng)用時(shí)不可能會(huì)有這么大的用戶量, ...

    用戶84 評(píng)論0 收藏0
  • container-as-a-service-0x01 -- 基于Docker的私有云&混合

    摘要:基于的私有云混合云構(gòu)建方案蘇依蜀黍是一個(gè)開(kāi)源的引擎,可以輕松的為任何應(yīng)用創(chuàng)建一個(gè)輕量級(jí)的可移植的自給自足的容器。開(kāi)發(fā)者在筆記本上編譯測(cè)試通過(guò)的容器可以批量地在生產(chǎn)環(huán)境中部署,包括虛擬機(jī)集群和其他的基礎(chǔ)應(yīng)用平臺(tái)。 container-as-a-service-0x01 -- 基于Docker的私有云&混合云構(gòu)建方案 By 蘇依蜀黍 . 2016.06.07 what Docker是一...

    import. 評(píng)論0 收藏0
  • 以靜制動(dòng)的TensorFlow Fold動(dòng)態(tài)計(jì)算圖介紹

    摘要:近日它們交鋒的戰(zhàn)場(chǎng)就是動(dòng)態(tài)計(jì)算圖,誰(shuí)能在這場(chǎng)戰(zhàn)爭(zhēng)中取得優(yōu)勢(shì),誰(shuí)就把握住了未來(lái)用戶的流向。所以動(dòng)態(tài)框架對(duì)虛擬計(jì)算圖的構(gòu)建速度有較高的要求。動(dòng)態(tài)計(jì)算圖問(wèn)題之一的多結(jié)構(gòu)輸入問(wèn)題的高效計(jì) 隨著深度學(xué)習(xí)的發(fā)展,深度學(xué)習(xí)框架之間競(jìng)爭(zhēng)也日益激烈,新老框架紛紛各顯神通,想要在廣大DeepLearner的服務(wù)器上占據(jù)一席之地。近日它們交鋒的戰(zhàn)場(chǎng)就是動(dòng)態(tài)計(jì)算圖,誰(shuí)能在這場(chǎng)戰(zhàn)爭(zhēng)中取得優(yōu)勢(shì),誰(shuí)就把握住了未來(lái)用戶的流...

    waltr 評(píng)論0 收藏0
  • 淺談對(duì)CSRF的認(rèn)識(shí),以及一些應(yīng)對(duì)措施

    摘要:了解了攻擊者利用的一些原理,就對(duì)應(yīng)的可以找到一些對(duì)應(yīng)措施在服務(wù)端驗(yàn)證的字段。因此,從某些方面來(lái)說(shuō),是相對(duì)安全的。個(gè)人覺(jué)得相對(duì)安全的做法就是既驗(yàn)證,同時(shí)也校驗(yàn)。整個(gè)過(guò)程雖然比較難,但這讓自己對(duì)于有了更深刻的認(rèn)識(shí)。 CSRF CSRF(Cross Site Request Forgery, 跨站域請(qǐng)求偽造)的定義,相信大家都不陌生。它是指攻擊者通過(guò)誘導(dǎo)用戶,打開(kāi)已精心設(shè)計(jì)好的頁(yè)面后,發(fā)送請(qǐng)...

    isaced 評(píng)論0 收藏0
  • 基于阿里云Serverless架構(gòu)下函數(shù)計(jì)算的最新應(yīng)用場(chǎng)景詳解(一)

    摘要:如果使用阿里云函數(shù)計(jì)算,您將高峰期每小時(shí)的訪問(wèn)日志,或者低谷期每小時(shí)的訪問(wèn)日志交給一個(gè)計(jì)算函數(shù)處理,并將處理結(jié)果存到中。下面結(jié)合阿里云的函數(shù)計(jì)算產(chǎn)品來(lái)講解各個(gè)應(yīng)用場(chǎng)景中架構(gòu)以及如何解決的場(chǎng)景中的痛點(diǎn)。 摘要: Serverless概念是近年來(lái)特別火的一個(gè)技術(shù)概念,基于這種架構(gòu)能構(gòu)建出很多應(yīng)用場(chǎng)景,適合各行各業(yè),只要對(duì)輕計(jì)算、高彈性、無(wú)狀態(tài)等場(chǎng)景有訴求的用戶都可以通過(guò)本文來(lái)普及一些基礎(chǔ)概...

    Eidesen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<