成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

Vicky / 2570人閱讀

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

Python有一些定制類的特殊方法,如__str__()__iter__()__getitem__(),其中一些具有動態(tài)特性的方法可以用來很方便地處理某些動態(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是一種編程風格,它的含義是:一個對象的語義,不是由于它繼承自特定的類或者實現(xiàn)某個接口,而是由它的屬性和方法的集合所決定。也就是說,我們在使用一個對象的時候,不在乎它是什么類型、是否實現(xiàn)了特定的接口,而是在意它有沒有我們需要的屬性和方法。
其實這就是在沒有語言約束的情況下來實現(xiàn)多態(tài),不像C++使用繼承和虛函數(shù)在語言上設(shè)置約束來實現(xiàn)多態(tài),所以就需要程序員來進行約束,好的文檔、代碼、測試都是很需要的。
在用該風格編碼時不要使用像type()、isintance()這樣的方法去測試函數(shù)中參數(shù)的類型,而是直接使用參數(shù)來表述行為,如果該參數(shù)沒有應(yīng)有的屬性或方法,就會報錯。
使用__getitem__()來使自己的類表現(xiàn)得和Python內(nèi)建的list、tuple、dict一樣時,就依靠了這種風格,下面給出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類型,只要該類型的實例由quack和feathers方法就可以。

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

__getattr__,當調(diào)用不存在的屬性時,如果存在__getattr__方法,就會調(diào)用__getattr方法來嘗試獲得屬性。

__call__,使實例本身變成可調(diào)用的。
這種完全動態(tài)的調(diào)用可以應(yīng)對一些動態(tài)情況,例如實現(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))

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

參考資料

廖雪峰的Blog

Python官方文檔

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/45392.html

相關(guān)文章

  • 測試管理之項目軟件測試風險管理實踐

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

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

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

    import. 評論0 收藏0
  • 以靜制動的TensorFlow Fold動態(tài)計算圖介紹

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

    waltr 評論0 收藏0
  • 淺談對CSRF的認識,以及一些應(yīng)對措施

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

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

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

    Eidesen 評論0 收藏0

發(fā)表評論

0條評論

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