動態語言、靜態語言及動態語言的“鴨子類型“

來源:互聯網
上載者:User

標籤:ima   運行   聯絡   出現   ++   nbsp   動態類型   col   類型   

動態語言與靜態語言:

所謂動態和靜態,是指程式中類型。類型又是指class,int等定義,比如變數的類型,函數的入參類型,傳回值類型。動態類型語言,表示在編寫程式的時候,無需制定類型,是運行時檢查;靜態類型語言,表示在編寫程式的時候,需要顯式地制定各種類型,在編譯的時候就會被檢查。

 

有人說靜態類型語言叫強型別語言,是指需要進行變數/物件類型聲明的語言,一般情況下需要編譯執行。

例如C/C++/Java/C#

有人說動態類型語言叫弱類型語言,是指不需要進行變數/物件類型聲明的語言,一般情況下不需要編譯(但也有編譯型的)。

例如PHP/ASP/Ruby/Python/Perl/ABAP/SQL/JavaScript/Unix Shell等等

 

Python是動態類型語言,官方的說法是Dynamic Typing。

拿Python來舉例:動態語言中的變數無需申明,賦值時也不需要制定類型,任何時候都可以改變其指向的類型,函數的傳回值也不固定,不同的入參得到的可以是不同類型的傳回值。

 

 

動態語言的“鴨子類型”:

什麼是動態語言的“鴨子類型”?

比如,我們寫了一個函數Test_Duck(),這個函數的入參是一個特定類型的對象(本例為Animal類型),這個函數就幹一個事情,就是調用對象的run()函數。假設這個類型是Dog,Dog繼承Animal,現在我們有兩個對象,dog和animal,分比是類型Dog和Animal。

如果我們把a和b作為入參傳入Test_Duck(),Dog和Animal都有run()成員函數,執行都OK。

這時,如果我們再定義一個類型Test,Test跟Animal和Dog沒有任何關係,唯一的聯絡都是,Test也有一個run()函數。假設test是Test的一個對象,我們把test傳入Test_Duck(),一樣可以得到執行。

本來我們設計Test_Duck()函數,是為了傳入Dog和Animal的對象,或者繼承Dog和Animal的其它新的類型對象,但是,突然出現了一個Test,跟Dog和Animal沒有任何關係,Test的對象也可以傳入Test_Duck()函數。我們說Test就是“鴨子類型”(A-like object)。

 

class Animal(object):    def run(self):        print(‘Animal is running‘)class Dog(Animal):    def run(self):        print(‘Dog is running ‘)class Test(Animal):    def run(self):        print(‘Test is right‘)def Test_Duck(animal):    animal.run()dog = Dog()dog.run()test = Test()Test_Duck(test)

 

運行結果為:

================== RESTART: E:/Python_pro/LXF/Class_Run.py ==================Dog is running Test is right

 

這就是動態語言的“鴨子類型”,它並不要求嚴格的繼承體系,一個對象只要“看起來像鴨子,走起路來像鴨子”,那它就可以被看做是鴨子。

Python的“file-like object“就是一種鴨子類型。對真正的檔案對象,它有一個read()方法,返回其內容。但是,許多個物件,只要有read()方法,都被視為“file-like object“。許多函數接收的參數就是“file-like object“,你不一定要傳入真正的檔案對象,完全可以傳入任何實現了read()方法的對象。

動態語言、靜態語言及動態語言的“鴨子類型“

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.