日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

鸭子类型和抽象基类

發(fā)布時間:2024/3/13 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 鸭子类型和抽象基类 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

深入類和對象

鴨子類型和多態(tài)

當看到一只鳥 走起來像鴨子,游泳起來像鴨子,叫起來也像鴨子。 那么這只鳥就可以被稱為鴨子。""" 定義三個類,貓 狗 鴨子 """ class Cat(object):def say(self):print("i an a cat") class Dog(object):def say(self):print("i an a dog") classDuck(object):def say(self):print("i an a duck")animal = Cat animal().say()animal_list = [Cat,Dog,Duck] for animal in animal_list:animal().say() """ java 會寫一個anamal類 并且指明子類繼承某個類并且重寫父方法 Aniaml an =Cat() an.saypython 可以不繼承繼承其中任何父類 需要做的就是 都要去取say這個父方法鴨子:所有的類,都實現(xiàn)了一個共同的方法,這個方法名字是一樣的##################################################################### 可迭代對象:iterable list set 等待, 例如extend方法,會調(diào)用__iter__ 或者__getitem__ a = [1,2] b = [3,4] a.enxtend(b) b不一定是list,只要是可迭代的對象就可以實現(xiàn),是因為都實現(xiàn)了以上的魔法函數(shù) 魔法函數(shù),充分的利用了鴨子類型。 ##################################################################### """

抽象基類 abc模塊

"""python是動態(tài)語言,是沒有變量類型的,可以指向任何類型。 動態(tài)語言 只有運行的時候,才能知道錯誤。 動態(tài)語言少了編譯時,檢查錯誤的環(huán)節(jié)python信奉的是鴨子類型,貫穿python整個設(shè)計理念。 python的一個類,到底有什么特性或者屬于類型 是看里面到底實現(xiàn)了哪些魔法函數(shù)抽象基類: 首先,抽象基類是不能實例化的。所有繼承這個基類的類,必須覆蓋 基類 設(shè)定好的方法"""# 我們?nèi)z查某各類是否有某種方法 class Company(object):def __init__(self,employee_list):self.employee = employee_listdef __len__(self):return len(self.employee) com = Company(["1","2"]) print(len(com)) # 判斷是否有 __len__這個函數(shù) True/False hasattr(com,"__len__")""" java的話,更傾向于判斷是否 是指定的類型 isinstance(com,Sized)python from collections.ab import Sized isinstance(com,Sized) """# @abc.abstractmethod """ # 我們需要強制某個子類必須實現(xiàn)某個方法例如 實現(xiàn)了一個web框架,集成cache(未來可以使用redis,cache,memorychache) 需要設(shè)計一個抽象基類,指定子類必須實現(xiàn)某些方法 import abc class Dog(metaclass=abc.ABCMeta):@abc.abstractmethoddef say(self):pass class A(Dog):pass A() 這樣如果A 繼承Dog類,沒有實現(xiàn)say方法的話,是不能實例化的。 TypeError: Can't instantiate abstract class A with abstract methods say """

總結(jié)

以上是生活随笔為你收集整理的鸭子类型和抽象基类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。