电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

簡述 Python 的類和對(duì)象

瀏覽:2日期:2022-07-13 13:28:49

系列最后一篇來說說Python中的類與對(duì)象,Python這門語言是無處不對(duì)象,如果你曾淺要了解過Python,你應(yīng)該聽過Python是一種面向?qū)ο缶幊痰恼Z言,所以你經(jīng)常可能會(huì)看到面向“對(duì)象”編程這類段子,而面向?qū)ο缶幊痰恼Z言都會(huì)有三大特征:封裝、繼承、多態(tài)。

我們平時(shí)接觸到的很多函數(shù)、方法的操作都具有這些性質(zhì),我們只是會(huì)用,但還沒有去深入了解它的本質(zhì),下面就介紹一下關(guān)于類和對(duì)象的相關(guān)知識(shí)。

封裝

封裝這個(gè)概念應(yīng)該并不陌生,比如我們把一些數(shù)據(jù)封裝成一個(gè)列表,這就屬于數(shù)據(jù)封裝,我們也可以將一些代碼語句封裝成一個(gè)函數(shù)方便調(diào)用,這就是代碼的封裝,我們也可以將數(shù)據(jù)和代碼封裝在一起。用術(shù)語表示的話,就是可以將屬性和方法進(jìn)行封裝,從而得到對(duì)象。

首先我們可以定義一個(gè)類,這個(gè)類中有屬性和方法,但有的伙伴會(huì)比較好奇,屬性和方法不是會(huì)封裝成對(duì)象嘛,為什么又變成類了?舉個(gè)例子,類就好比是一個(gè)毛坯房,而對(duì)象是在毛坯房的基礎(chǔ)上改造成的精裝房。

class XiaoMing: #屬性 height = 180 weight = 65 sex = ’男’ #方法 def run(self): print(’小明在跑步’) def sleep(self): print(’小明在睡覺’)

在類定義完成時(shí)就創(chuàng)建了一個(gè)類對(duì)象,它是對(duì)類定義創(chuàng)建的命名空間進(jìn)行了一個(gè)包裝。類對(duì)象支持兩種操作:屬性引用和實(shí)例化。

屬性引用的語法就是一般的標(biāo)準(zhǔn)語法:obj.name。比如XiaoMing.height和XiaoMing.run就是屬性引用,前者會(huì)返回一條數(shù)據(jù),而后者會(huì)返回一個(gè)方法對(duì)象。

In[1]:print(XiaoMing.height)Out[1]:180In[2]:print(XiaoMing.run)Out[2]:<function XiaoMing.run at 0x0000021C6239D0D0>

這里也支持對(duì)類屬性進(jìn)行賦值操作,比如為類中的weight屬性賦予一個(gè)新值。

In[3]:print(XiaoMing.weight)Out[3]:65In[4]:XiaoMing.weight = 100In[5]:print(XiaoMing.weight)Out[5]:100

而類的實(shí)例化可以將類對(duì)象看作成一個(gè)無參函數(shù)的賦值給一個(gè)局部變量,如下:

In[6]:ming = XiaoMing()

ming就是由類對(duì)象實(shí)例化后創(chuàng)建的一個(gè)實(shí)例對(duì)象,通過實(shí)例對(duì)象也可以調(diào)用類中的屬性和方法。

In[7]:ming.run()Out[7]:小明在跑步In[8]:print(xiaoming.height)Out[8]:180#通過向類對(duì)象調(diào)用方法返回的方法對(duì)象中傳入實(shí)例對(duì)象也可以達(dá)到同樣效果In[11]:XiaoMing.run(ming)Out[11]:小明在跑步

魔法方法__init__

類在實(shí)例化過程中并不都是像上面例子一樣簡單的,一般類都會(huì)傾向?qū)?shí)例對(duì)象創(chuàng)建為有初始狀態(tài)的,所以在類中可能會(huì)定義一個(gè)__init__的魔法方法,這個(gè)方法就可以幫助接收、傳入?yún)?shù)。

而一個(gè)類如果定義了__init__方法,那么在類對(duì)象實(shí)例化的過程中就會(huì)自動(dòng)為新創(chuàng)建的實(shí)例化對(duì)象調(diào)用__init__方法,請(qǐng)看下面這個(gè)例子。

class Coordinates: def __init__(self,x,y): self.x = x self.y = y def print_coor(self): print(’當(dāng)前坐標(biāo)為(%s,%s)’%(self.x,self.y))

可以看到在__init__()中傳入了參數(shù)x和y,然后在print_coor中需要接收參數(shù)x和y,接下來通過實(shí)例化這個(gè)類對(duì)象,驗(yàn)證一下參數(shù)是否能通過__init__()傳遞到類的實(shí)例化操作中。

In[9]:coor = Coordinates(5,3)In[10]:coor.print_coor()Out[10]:當(dāng)前坐標(biāo)為(5,3)

繼承

所謂繼承就是一個(gè)新類在另一個(gè)類的基礎(chǔ)上構(gòu)建而成,這個(gè)新類被稱作子類或者派生類,而另一個(gè)類被稱作父類、基類或者超類,而子類會(huì)繼承父類中已有的一些屬性和方法。

class Mylist(list): passlist_ = Mylist()list_.append(1)print(list_)’’’ [1] ’’’

比如上面這個(gè)例子,我并沒有將list_定義成一個(gè)列表,但它卻能調(diào)用append方法。原因是類Mylist繼承于list這個(gè)基類,而list_又是Mylist的一個(gè)實(shí)例化對(duì)象,所以list_也會(huì)擁有父類list擁有的方法。

當(dāng)然可以通過自定義類的形式實(shí)現(xiàn)兩個(gè)類之間的繼承關(guān)系,我們定義Parent和Child兩個(gè)類,Child中沒有任何屬性和方法,只是繼承于父類Parent。

class Parent: def par(self): print(’父類方法’)class Child(Parent): passchild = Child()child.par()’’’父類方法’’’

覆蓋

當(dāng)子類中定義了與父類中同名的方法或者屬性,則會(huì)自動(dòng)覆蓋父類對(duì)應(yīng)的方法或?qū)傩裕€是用上面這個(gè)例子實(shí)現(xiàn)一下,方便理解。

class Parent: def par(self): print(’父類方法’)class Child(Parent): def par(self): print(’子類方法’)child = Child()child.par()’’’子類方法’’’

可以看到子類Child中多了一個(gè)和父類Parent同名的方法,再實(shí)例化子類并調(diào)用這個(gè)方法時(shí),最后調(diào)用的是子類中的方法。Python中繼承也允許多重繼承,也就是說一個(gè)子類可以繼承多個(gè)父類中的屬性和方法,但是這類操作會(huì)導(dǎo)致代碼混亂,所以大多數(shù)情況下不推薦使用,這里就不過多介紹了。

多態(tài)

多態(tài)比較簡單,比如定義兩個(gè)類,這兩個(gè)類沒有任何關(guān)系,只是兩個(gè)類中有同名的方法,而當(dāng)兩個(gè)類的實(shí)例對(duì)象分別調(diào)用這個(gè)方法時(shí),不同類的實(shí)例對(duì)象調(diào)用的方法也是不同的。

class XiaoMing: def introduce(self): print('我是小明')class XiaoHong: def introduce(self): print('我是小紅')

上面這兩個(gè)類中都有introduce方法,我們可以實(shí)例化一下兩個(gè)類,利用實(shí)例對(duì)象調(diào)用這個(gè)方法實(shí)現(xiàn)一下多態(tài)。

In[12]:ming = XiaoMing()In[13]:hong = XiaoHong()In[14]:ming.introduce()Out[14]:我是小明In[15]:hong.introduce()Out[15]:我是小紅

常用BIF

1、issubclass(class,classinfo)

判斷一個(gè)類是否是另一個(gè)類的子類,如果是則返回True,反之則返回False。

class Parent: passclass Child(Parent): passprint(issubclass(Child,Parent))’’’True’’’

需要注意的有兩點(diǎn):

1.第二個(gè)參數(shù)不僅可以傳入類,也可以傳入由類組成的元組。 2.一個(gè)類被判定為自身的子類,也就是說這兩個(gè)參數(shù)傳入同一個(gè)類時(shí),也會(huì)返回True。

print(issubclass(Parent,Parent))’’’True’’’

2、isinstance(object,classinfo)

判斷一個(gè)對(duì)象是否為一個(gè)類的實(shí)例對(duì)象,如果是則返回True,反之則返回False。

class Parent: passclass Child: passp = Parent()c = Child()print(isinstance(p,Parent,Child))#Trueprint(isinstance(c,Parent))#False

需要注意的有兩點(diǎn):

1.第二個(gè)參數(shù)不僅可以傳入類,也可以傳入由類組成的元組。 2.如果第一個(gè)參數(shù)傳入的不是一個(gè)對(duì)象,則總是返回False。

3、hasattr(object,name)

判斷一個(gè)實(shí)例對(duì)象中是否包含一個(gè)屬性,如果是則返回True,反之則返回False。

class Parent: height = 100p = Parent()print(hasattr(p,’height’))’’’True’’’

需要注意的是第二個(gè)參數(shù)name必須為字符串形式傳入,如果不是則會(huì)返回False。

以上就是簡述 Python 的類和對(duì)象的詳細(xì)內(nèi)容,更多關(guān)于Python 的類和對(duì)象的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 河南mpp电力管_mpp电力管生产厂家_mpp电力电缆保护管价格 - 河南晨翀实业 | 成都网站建设制作_高端网站设计公司「做网站送优化推广」 | 新疆十佳旅行社_新疆旅游报价_新疆自驾跟团游-新疆中西部国际旅行社 | 杜甫仪器官网|实验室平行反应器|升降水浴锅|台式低温循环泵 | 天津仓储物流-天津电商云仓-天津云仓一件代发-博程云仓官网 | 青岛美佳乐清洁工程有限公司|青岛油烟管道清洗|酒店|企事业单位|学校工厂厨房|青岛油烟管道清洗 插针变压器-家用电器变压器-工业空调变压器-CD型电抗器-余姚市中驰电器有限公司 | 塑木弯曲试验机_铜带拉伸强度试验机_拉压力测试台-倾技百科 | 旋片真空泵_真空泵_水环真空泵_真空机组-深圳恒才机电设备有限公司 | 万濠投影仪_瑞士TRIMOS高度仪_尼康投影仪V12BDC|量子仪器 | 高压绝缘垫-红色配电房绝缘垫-绿色高压绝缘地毯-上海苏海电气 | 杭州代理记账费用-公司注销需要多久-公司变更监事_杭州福道财务管理咨询有限公司 | 洗地机-全自动/手推式洗地机-扫地车厂家_扬子清洁设备 | 温泉机设备|温泉小镇规划设计|碳酸泉设备 - 大连连邦温泉科技 | 高压管道冲洗清洗机_液压剪叉式升降机平台厂家-林君机电 | 高精度-恒温冷水机-螺杆式冰水机-蒸发冷冷水机-北京蓝海神骏科技有限公司 | 冲击式破碎机-冲击式制砂机-移动碎石机厂家_青州市富康机械有限公司 | pbt头梳丝_牙刷丝_尼龙毛刷丝_PP塑料纤维合成毛丝定制厂_广州明旺 | 全自动不干胶贴标机_套标机-上海今昂贴标机生产厂家 | 众品地板网-地板品牌招商_地板装修设计_地板门户的首选网络媒体。 | 北京自然绿环境科技发展有限公司专业生产【洗车机_加油站洗车机-全自动洗车机】 | 高柔性拖链电缆-聚氨酯卷筒电缆-柔性屏蔽电缆厂家-玖泰电缆 | 手持式线材张力计-套帽式风量罩-深圳市欧亚精密仪器有限公司 | 聚氨酯复合板保温板厂家_廊坊华宇创新科技有限公司 | HYDAC过滤器,HYDAC滤芯,现货ATOS油泵,ATOS比例阀-东莞市广联自动化科技有限公司 | 盐水蒸发器,水洗盐设备,冷凝结晶切片机,转鼓切片机,絮凝剂加药系统-无锡瑞司恩机械有限公司 | 气动隔膜泵厂家-温州永嘉定远泵阀有限公司 | 睿婕轻钢别墅_钢结构别墅_厂家设计施工报价 | 吊篮式|移动式冷热冲击试验箱-二槽冷热冲击试验箱-广东科宝 | 兰州UPS电源,兰州山特UPS-兰州万胜商贸 | 平面钻,法兰钻,三维钻-山东兴田阳光智能装备股份有限公司 | 合肥升降机-合肥升降货梯-安徽升降平台「厂家直销」-安徽鼎升自动化科技有限公司 | 桌上式超净工作台-水平送风超净工作台-上海康路仪器设备有限公司 | 全自动贴标机-套标机-工业热风机-不干胶贴标机-上海厚冉机械 | 陕西华春网络科技股份有限公司| 申江储气罐厂家,储气罐批发价格,储气罐规格-上海申江压力容器有限公司(厂) | BAUER减速机|ROSSI-MERSEN熔断器-APTECH调压阀-上海爱泽工业设备有限公司 | 玉米深加工机械,玉米加工设备,玉米加工机械等玉米深加工设备制造商-河南成立粮油机械有限公司 | 播音主持培训-中影人教育播音主持学苑「官网」-中国艺考界的贵族学校 | 双杰天平-国产双杰电子天平-美国双杰-常熟双杰仪器 | 包塑丝_高铁绑丝_地暖绑丝_涂塑丝_塑料皮铁丝_河北创筹金属丝网制品有限公司 | 珠海白蚁防治_珠海灭鼠_珠海杀虫灭鼠_珠海灭蟑螂_珠海酒店消杀_珠海工厂杀虫灭鼠_立净虫控防治服务有限公司 |