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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

面向对象三大核心特点,封装、继承和多态

發(fā)布時(shí)間:2023/11/29 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面向对象三大核心特点,封装、继承和多态 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

封裝

封裝其實(shí)是一種思想,將事物狀態(tài)和功能裝進(jìn)一個(gè)容器,那么這個(gè)容器在python中就是類,由這個(gè)類產(chǎn)生的對(duì)象都擁有類的屬性和功能

在面向?qū)ο蟮乃枷胫?#xff0c;推崇將具有某些共同特征的事物歸為一類,那么這些事物就可以看做是這個(gè)類的具象化對(duì)象,但是允許個(gè)體擁有不同的特征

例如:你和我都是人,都具有人的基本功能,那么我們就是人的對(duì)象,我和你的名字可以不一樣,性別可以不一樣,但本質(zhì)上我們都是人類

在前面我們說到,類不是實(shí)實(shí)在在存在的,是一系列擁有相似屬性和功能的事物的抽離。那么在定義類和類的屬性、功能上實(shí)際就是把這些屬性和功能封裝進(jìn)類里面,抽離相似屬性和功能并把它們放到類里,這種思想就是封裝

class Animal:

  dog = “”

  human = “”

  ...

  def eat(self):

    print("enting")

  def sleep(self):

    print("sleeping")

動(dòng)物類封裝進(jìn)了dog、human等等屬性,封裝了eat、sleep等功能,這些都屬于Animal類共有的一些屬性和功能

?

繼承

?

繼承的概念源于對(duì)現(xiàn)實(shí)事物的模擬,在人類的概念中,人類下面還有女人、男人、小孩、大人等細(xì)分概念,那么女人就是人類的擴(kuò)展,人類概念就是女人概念的爸爸,女人概念除了擁有人類的所有屬性和功能外還多了一個(gè)屬性就是性別,那么女人類和人類就有非常多的相同屬性和功能,回到編程中,這些高度相似或者相同的屬性和功能其實(shí)就是重復(fù)的代碼,繼承的出現(xiàn)就是為了避免重復(fù)寫大量代碼描述兩個(gè)屬性和功能高度重合的類。

例:

class human:

  legs = 4

  ear = 2

  def? eat (self):

    pass

class women:

  legs =? 4

  ear = 2

  sex = “”

  def eat (self):

    pass

由human 和 women 類可以看出,他們有相同的屬性legs、ear和相同的功能eat(),如果在代碼里這么寫代碼將非常冗余,面向?qū)ο笳Z言幾乎都有繼承的思想,如果用繼承來表示上面的代碼將會(huì)是:

class human:

  legs = 4

  ear = 2

  def? eat?(self):

    pass

?

class women(human):

  sex = ""

這樣的話human就是繼承women,human就是women的父類,women就是human的子類,women既有自己的屬性sex,也擁有父類的所有屬性和功能。

具體實(shí)現(xiàn)和原理見:

多繼承

在python中允許多繼承關(guān)系,一個(gè)類可以同時(shí)繼承多個(gè)類,這樣它就擁有所有父類的屬性和方法
在python2中,沒有繼承任何類的類被稱為經(jīng)典類,默認(rèn)不繼承任何類

在python3中,所有的類默認(rèn)繼承object,這種類被稱為新式類

菱形繼承

a繼承b,c,b,c由同時(shí)繼承d,那么繼承關(guān)系就形成閉環(huán),此時(shí)a擁有的功能和屬性最多,d擁有的功能和屬性最少

菱形繼承會(huì)帶來屬性查找順序的問題,比如a的屬性name是繼承而來的,但不知道是b,c,d哪一個(gè)的,此時(shí)就會(huì)有查找順序,在python2和python中是不一樣的

python2中,是以深度查找為基本原則,即a->b->d->c,一直查找到繼承關(guān)系最深的那一層

python3中,是以廣度查找為基本原則的,即a->b->c->d,先將分支都查找完,最后找最深的那一層

?

多態(tài)

由同一父類派生的不同子類對(duì)象都可以作為參數(shù)傳遞給某個(gè)函數(shù)去執(zhí)行,并產(chǎn)生不同的結(jié)果,這種形態(tài)叫多態(tài)。

例:

class A:

  def __init__(self,name):

    self.name = name

class B(A):

  pass

def pri_name(obj):

  print(obj.name)

b1 = B("egon")

b2 = B("owen")

pri_name(b1)

pri_name(b2)

打印結(jié)果:

egon

owen

?

鴨子類型

兩個(gè)不相干的兩個(gè)類的對(duì)象可以將自身作為參數(shù)傳給同一個(gè)函數(shù)去調(diào)用執(zhí)行,這樣的就是鴨子類型,在python里十分推崇鴨子類型,一個(gè)生物不知道它是不是鴨子,但它只要長(zhǎng)得像鴨子,水里游泳像鴨子,那就認(rèn)為它是鴨子

class A:

  def __init__(self,name):

    self.name = name

    self.age = 18

class B:

  def __init__(self,name):

    self.name = name

    self.sex = "female"

def pri_name(obj):

  print(obj.name)

b1 = B("egon")

b2 = B("owen")

pri_name(b1)

pri_name(b2)

打印結(jié)果:

egon

owen

?

轉(zhuǎn)載于:https://www.cnblogs.com/dongxixi/p/10759364.html

總結(jié)

以上是生活随笔為你收集整理的面向对象三大核心特点,封装、继承和多态的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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