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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

day23-多态和

發(fā)布時(shí)間:2024/7/5 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 day23-多态和 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

# 多態(tài)

什么是多態(tài)?

# 一種事物具備多種不同的形態(tài) 例如:水 固態(tài) 氣態(tài) 液態(tài) ?大黃蜂:汽車人,汽車,飛機(jī) # 官方解釋: 多個(gè)不同類對(duì)象可以響應(yīng)同一個(gè)方法,產(chǎn)生不同的結(jié)果 首先強(qiáng)調(diào)多態(tài)不是一種特殊的語法,而是一種狀態(tài),特性(既多個(gè)不同對(duì)象可以響應(yīng)同一個(gè)方法,產(chǎn)生不同的結(jié)果),既多個(gè)對(duì)象有相同的使用方法

?

?

為什么要用多態(tài)?

# 對(duì)于使用者而言,大大的降低了使用難度,我們之前寫的USB接口下的鼠標(biāo),鍵盤,就屬于多態(tài)

?

怎么實(shí)現(xiàn)多態(tài)?

# 接口 抽象類 鴨子類型 都可以寫出具備多態(tài)的代碼,最簡單的就是鴨子類型

?

案例:

# 多態(tài),不同的對(duì)象響應(yīng)同一個(gè)方法,產(chǎn)生不同的結(jié)果,吃,走,下蛋class Ji:def dawn(self):print("咯咯咯")def egg(self):print("下雞蛋")class Duck:def dawn(self):print('嘎嘎嘎')def egg(self):print('下鴨蛋')class E:def dawn(self):print("餓餓餓")def egg(self):print('下鵝蛋')j = Ji() y = Duck() e = E()def manage(obj):obj.dawn()def get_egg(obj):obj.egg()manage(j) manage(y) manage(e) get_egg(j) get_egg(y) get_egg(e)

?

?

OOP中的內(nèi)置函數(shù)

isinstance

# 判斷一個(gè)對(duì)象是否是某個(gè)類的實(shí)例 參數(shù)1 要判斷的對(duì)象參數(shù)2 要判斷的類型

?

運(yùn)用

def add_num(a, b):if isinstance(a, int) and isinstance(b, int):return a + breturn Noneprint(add_num(23, 97)) print(add_num(12.7, 76))

?

?

## issubclass

# 判斷一個(gè)類是否是另一個(gè)類的子類 參數(shù)一是子類參數(shù)二是父類

?

運(yùn)用

class Animal:def eat(self):print("動(dòng)物得吃東西...")class Pig(Animal):def eat(self):print("豬得吃 豬食....")class Tree:def light(self):print("植物光合作用....")pig = Pig() t = Tree()def manage(obj):if issubclass(type(obj), obj):obj.eat()else:print("不是一頭動(dòng)物!")manage(pig)manage(t)

?

類中的魔法函數(shù)

str

__str__ 會(huì)在對(duì)象被轉(zhuǎn)換為字符串時(shí),轉(zhuǎn)換的結(jié)果就是這個(gè)函數(shù)的返回值 使用場景:我們可以利用該函數(shù)來自定義,對(duì)象的是打印格式

?

運(yùn)用

import timeclass Person:def __init__(self, name, age):self.name = nameself.age = agedef __str__(self):return "這是一個(gè)person對(duì)象,name:%s,age:%s" % (self.name, self.age)def __del__(self):print("del run")p = Person('jack', 20)time.sleep(2)print('over')

del

# 執(zhí)行時(shí)機(jī): 手動(dòng)刪除對(duì)象時(shí)立馬執(zhí)行,或是程序運(yùn)行結(jié)束時(shí)也會(huì)自動(dòng)執(zhí)行 # 使用場景:當(dāng)你的對(duì)象在使用過程中,打開了不屬于解釋器的資源:例如文件,網(wǎng)絡(luò)端口

使用案例

class FileTool: """該類用于簡化文件的讀寫操作 """def __init__(self,path): self.file = open(path,"rt",encoding="utf-8") self.a = 100def read(self): return self.file.read()# 在這里可以確定一個(gè)事,這個(gè)對(duì)象肯定不使用了 所以可以放心的關(guān)閉問文件了 def __del__(self): self.file.close()tool = FileTool("a.txt") print(tool.read())

call

# 執(zhí)行時(shí)機(jī):在調(diào)用對(duì)象時(shí)自動(dòng)執(zhí)行,(既對(duì)象加括號(hào))

?

使用

#call 的執(zhí)行時(shí)機(jī) class A:def __call__(self, *args, **kwargs):print("call run")print(args)print(kwargs)a = A() a(1,a=100)

?

slots

# 該屬性是一個(gè)類屬性,用于優(yōu)化對(duì)象內(nèi)存占用,優(yōu)化的原理,將原本不固定的屬性數(shù)量,變得固定了,這樣的解釋器就不會(huì)為這個(gè)對(duì)象創(chuàng)建名稱空間,所以__dict__也沒了,從而達(dá)到減少內(nèi)存開銷的效果 # 另外當(dāng)類中出現(xiàn)了slots時(shí)將導(dǎo)致這個(gè)類的對(duì)象無法在添加新的屬性

slots的使用

class Person:__slots__ = ["name"] def __init__(self,name): self.name = namep = Person("jck")# 查看內(nèi)存占用 # print(sys.getsizeof(p)) # p.age = 20 # 無法添加# dict 沒有了 print(p.__dict__)

?

getattr setattr delattr

# getattr 用點(diǎn)訪問屬性的時(shí)如果屬性不存在時(shí)執(zhí)行 # setattr 用點(diǎn)設(shè)置屬性時(shí) # delattr 用del 對(duì)象.屬性 刪除屬性時(shí) 執(zhí)行 這幾個(gè)函數(shù)反映了 python解釋器是如何實(shí)現(xiàn) 用點(diǎn)來訪問屬性getattribute 該函數(shù)也是用來獲取屬性 在獲取屬性時(shí)如果存在getattribute則先執(zhí)行該函數(shù),如果沒有拿到屬性則繼續(xù)調(diào)用 getattr函數(shù),如果拿到了則直接返回

[] 的實(shí)原理

# getitem setitem delitem 任何的符號(hào) 都會(huì)被解釋器解釋成特殊含義 ,例如 . [] ()getitem 當(dāng)你用中括號(hào)去獲取屬性時(shí) 執(zhí)行 setitem 當(dāng)你用中括號(hào)去設(shè)置屬性時(shí) 執(zhí)行 delitem 當(dāng)你用中括號(hào)去刪除屬性時(shí) 執(zhí)行

運(yùn)算符重載

# 當(dāng)我們?cè)谑褂媚硞€(gè)符號(hào)時(shí),python解釋器都會(huì)為這個(gè)符號(hào)定義一個(gè)含義,同時(shí)調(diào)用對(duì)應(yīng)的處理函數(shù),
# 當(dāng)我們需要自定義對(duì)象的比較規(guī)則時(shí),就可在子類中覆蓋 大于 等于 等一系列方法....

?

案例:

原本自定義對(duì)象無法直接使用大于小于來進(jìn)行比較 ,我們可自定義運(yùn)算符來實(shí)現(xiàn),讓自定義對(duì)象也支持比較運(yùn)算符

class Student(object):def __init__(self,name,height,age):self.name = nameself.height = heightself.age = agedef __gt__(self, other):# print(self)# print(other)# print("__gt__")return self.height > other.heightdef __lt__(self, other):return self.height < other.heightdef __eq__(self, other):if self.name == other.name and self.age == other.age and self.height == other.height:return Truereturn Falsestu1 = Student("jack",180,28) stu2 = Student("jack",180,28) # print(stu1 < stu2) print(stu1 == stu2)

?

?

上述代碼中,other指的是另一個(gè)參與比較的對(duì)象,

大于和小于只要實(shí)現(xiàn)一個(gè)即可,符號(hào)如果不同 解釋器會(huì)自動(dòng)交換兩個(gè)對(duì)象的位置

?

迭代器協(xié)議

# 迭代器是指具有__iter__和__next__的對(duì)象 我們可以為對(duì)象增加這兩個(gè)方法來讓對(duì)象變成一個(gè)迭代器

?

案例

class MyRange:def __init__(self,start,end,step):self.start = startself.end = endself.step = stepdef __iter__(self):return selfdef __next__(self):a = self.startself.start += self.stepif a < self.end:return aelse:raise StopIterationfor i in MyRange(1,10,2):print(i)

?

上下文管理

# 上下文 context 這個(gè)概念屬于語言學(xué)科,指的是一段話的意義,要參考當(dāng)前的場景,既上下文 在python中,上下文可以理解為是一個(gè)代碼區(qū)間,一個(gè)范圍 ,例如with open 打開的文件僅在這個(gè)上下文中有效 涉及到的兩個(gè)方法:# enter 表示進(jìn)入上下文,(進(jìn)入某個(gè)場景 了) # exit 表示退出上下文,(退出某個(gè)場景 了)當(dāng)執(zhí)行with 語句時(shí),會(huì)先執(zhí)行enter , 當(dāng)代碼執(zhí)行完畢后執(zhí)行exit,或者代碼遇到了異常會(huì)立即執(zhí)行exit,并傳入錯(cuò)誤信息 包含錯(cuò)誤的類型.錯(cuò)誤的信息.錯(cuò)誤的追蹤信息

?

?

注意

enter 函數(shù)應(yīng)該返回對(duì)象自己 exit函數(shù) 可以有返回值,是一個(gè)bool類型,用于表示異常是否被處理,僅在上下文中出現(xiàn)異常有用 如果為True 則意味著,異常以及被處理了 False,異常未被處理,程序?qū)⒅袛鄨?bào)錯(cuò)

?

?

# 對(duì)于使用者而言,大大的降低了使用難度,我們之前寫的USB接口下的鼠標(biāo),鍵盤,就屬于多態(tài)

?

轉(zhuǎn)載于:https://www.cnblogs.com/Ryan-Yuan/p/11265143.html

總結(jié)

以上是生活随笔為你收集整理的day23-多态和的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 自拍视频在线播放 | 伊人青青 | 有机z中国电影免费观看 | 中国美女一级片 | 黄网站免费大全入口 | 日本不卡视频在线播放 | 中文字幕日本在线观看 | 18岁免费观看电视连续剧 | 亚洲天堂男人的天堂 | 天天插天天干 | 影音资源av | 成人黄色小说在线观看 | 免费黄色欧美 | 成人av影院 | 国产极品一区二区 | 日韩av网站大全 | 秋霞成人午夜伦在线观看 | 中文字幕在线播放一区二区 | 国产porn| 成人区视频 | 日韩欧美日韩 | 美女扒开内看个够网站 | 精品久久免费视频 | 日韩成人精品在线观看 | 黄色羞羞网站 | 一区二区久久久 | 无码人妻熟妇av又粗又大 | 精品美女久久久 | 天天艹夜夜 | 日本三级全黄 | 聚色av| 国产熟妇与子伦hd | 精品一区二区三区免费看 | 天天视频国产 | 国产黄色网址在线观看 | 免费国产在线视频 | 精品国产一区一区二区三亚瑟 | 国产精品久久久久久久久久久久久久久久 | 欧美做受高潮 | 欧美成人xxx| 九九免费在线视频 | 无码人妻精品一区二区蜜桃视频 | 女生鸡鸡软件 | 亚洲黄色在线网站 | ww黄色| 欧美99| 欧美成人精品一区二区三区在线看 | 性生交大片免费看女人按摩 | 亚洲人成人网 | 欧美一级生活片 | 老女人黄色片 | 精品国产91久久久久久久妲己 | 欧洲高潮三级做爰 | www.色哟哟 | 久草视频国产 | 欧美gv在线| 婷婷国产视频 | 91视频xxx| 香蕉蜜桃视频 | 欧美一区二区三区国产 | 亚洲一区欧美二区 | 91黄色小网站 | 欧美大片免费播放器 | 欧美视频在线免费看 | 亚洲精品一 | 欧美大片免费高清观看 | 国产成人精品一区二区三区在线观看 | 波多野结衣简介 | 99碰碰 | 久久久久逼 | www.日批| 中文字幕在线视频一区二区三区 | 九色影院 | 国产日产精品一区二区三区四区 | 黄色在线观看视频网站 | 好色婷婷| 韩国三级丰满少妇高潮 | 可以在线观看的黄色 | 成人爽爽爽 | 久久黄色一级片 | 国内av自拍 | 884aa四虎影成人精品一区 | 亚洲一区二区福利视频 | 黄色av网站在线观看 | 人妻体内射精一区二区 | 成人精品在线看 | 国产黑丝91| 日韩精品人妻中文字幕 | 亚洲一品道 | 久久一卡二卡 | 天天天天射 | 久久久久国产精品人妻 | 四虎永久在线精品免费网址 | 99成人在线 | 免费在线成人 | 国产精品jizz在线观看无码 | 久久精品黄aa片一区二区三区 | 色综合久久综合 | 一区二区三区视频免费 |