1. 程式人生 > >Python中的介面

Python中的介面

介面(interface)

介面, (按照我自己的理解)最接地氣的定義是: 實體向外暴露的公共可訪問方法與屬性. 這個實體可以是Class, Object, Software等任意可以看成一個整體的東西. 外界通過它們的interface與它們進行互動.
按照Wikipedia的說法, 介面與協議(Protocol)是同義詞, 因為介面在定義互動方式的同時肯定也定義了互動時的通訊內容, 格式等.

Interface: Java vs. Python

Java裡的Interface是一種特殊的類. 要相容某種協議, 就要implements相應的interface. 例如, 序列化協議Serializable

, 比較/排序協議Comparable.

而在Python裡, 不是通過implements介面類來相容特定協議, 而是隻需通過實現特定的方法. 例如, 只需要實現__getitem__方法, 就可以支援索引操作: obj[idx], 實現__hash__方法就可以支援Hash操作.

用Fluent Python裡的話來講, 要判斷一個動物是不是鴨子, Java看的是它的血統: 是否實現了鴨子介面, 是一個鴨子例項; Python則是看它的行為: 是否像鴨子一樣走路, 一樣叫發聲.

Java是強型別語言, 在編譯時就可以通過型別檢查知道某呼叫是否合法, 例如是否可序列化. Python是弱型別語言, 加上可在執行時給Object/Class動態新增方法/屬性(即Monkey Patching), 在執行時才能知道呼叫是否合法.

存在差異, 優劣之分則是樂山樂水.