欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python編程中類(lèi)與類(lèi)的關(guān)系詳解

 更新時(shí)間:2019年08月08日 16:14:31   作者:笑oy  
在本文里小編給大家整理了關(guān)于Python編程中類(lèi)與類(lèi)的關(guān)系以及相關(guān)代碼知識(shí)點(diǎn),需要的朋友們可以學(xué)習(xí)下。

類(lèi)與類(lèi)的關(guān)系

依賴(lài)關(guān)系

# 依賴(lài)關(guān)系: 將一個(gè)類(lèi)的類(lèi)名或者對(duì)象傳給另一個(gè)類(lèi)的方法中.
class Elephant:
  def __init__(self, name):
    self.name = name
  def open(self,r1):
    # print(ref1)
    print(f'{self.name}默念三聲: 芝麻開(kāi)門(mén)')
    r1.open_door()
  def close(self):
    print('大象默念三聲:芝麻關(guān)門(mén)')
class Refrigerator:
  def __init__(self, name):
    self.name = name
  def open_door(self):
    print(f'{self.name}冰箱門(mén)被打開(kāi)了....')
  def close_door(self):
    print('冰箱門(mén)被關(guān)上了....')
e1=Elephant('大象')
r1=Refrigerator('海爾冰箱') 
e1.open(r1)   #將一個(gè)類(lèi)的類(lèi)名或者對(duì)象傳給另一個(gè)類(lèi)的方法中.產(chǎn)生了依賴(lài)關(guān)系

組合關(guān)系

組合: 將一個(gè)類(lèi)的對(duì)象封裝成另一個(gè)類(lèi)的對(duì)象的屬性.

class Boy:
  def __init__(self, name):
    self.name = name
  def meet(self, girl_friend=None):
    self.girl_friend = girl_friend # wu對(duì)象空間 : girl_friend : object對(duì)象
  def have_diner(self): # self = wu這個(gè)對(duì)象空間
    if self.girl_friend:
      print(f'{self.name}請(qǐng)年齡為:{self.girl_friend.age},姓名為{self.girl_friend.name}一起吃六塊錢(qián)的麻辣燙')
      self.girl_friend.shopping(self) # (self = wu對(duì)象空間)
    else:
      print('單身狗,吃什么吃')
class Girl:
  def __init__(self, name, age):
    self.name = name
    self.age = age
  def shopping(self,boy_friend):
    print(f'{boy_friend.name},{self.name}一起去購(gòu)物!')
wu = Boy('吳超')
flower = Girl('如花', 48)
# 組合: 將一個(gè)類(lèi)的對(duì)象封裝成另一個(gè)類(lèi)的對(duì)象的屬性.
wu.meet(flower)
wu.have_diner()

繼承關(guān)系

繼承的優(yōu)點(diǎn):

1,增加了類(lèi)的耦合性(耦合性不宜多,宜精)。

2,減少了重復(fù)代碼。

3,使得代碼更加規(guī)范化,合理化

繼承:可以分單繼承,多繼承。

單繼承

第一種:直接執(zhí)行

class Aniaml(object):
  type_name = '動(dòng)物類(lèi)'

  def __init__(self,name,sex,age):
      self.name = name
      self.age = age
      self.sex = sex

  def eat(self):
    print(self)
    print('吃東西')
class Person(Aniaml):
  pass
P1=Person('alex','男','18')
# 實(shí)例化對(duì)象時(shí)必須執(zhí)行__init__方法,類(lèi)中沒(méi)有,從父類(lèi)找,父類(lèi)沒(méi)有,從object類(lèi)中找
P1.eat()
# 先要執(zhí)行自己類(lèi)中的eat方法,自己類(lèi)沒(méi)有才能執(zhí)行父類(lèi)中的方法。

第二種:子類(lèi)和父類(lèi)都有相同功能,都想執(zhí)行

class Aniaml(object):
  type_name = '動(dòng)物類(lèi)'
  def __init__(self,name,sex,age):
      self.name = name
      self.age = age
      self.sex = sex

  def eat(self):
    print('吃東西')

class Person(Aniaml):
  def __init__(self,name,sex,age,mind):
    super().__init__(name,sex,age) # super.__init__ 自動(dòng)幫你把self 傳給父類(lèi)的__init__
    self.mind = mind

  def eat(self):
    super().eat()
    print('%s 吃飯'%self.name)
 
    
p1 = Person('春哥','laddboy',18,'有思想')

多繼承

class A:
  pass
class B(A):
  pass
class C(A):
  pass
class D(B, C):
  pass
class E:
  pass
class F(D, E):
  pass
class G(F, D):
  pass
class H:
  pass
class Foo(H, G):
  pass

新式類(lèi)的多繼承

MRO是一個(gè)有序列表L,在類(lèi)被創(chuàng)建時(shí)就計(jì)算出來(lái)。

通用計(jì)算公式為:

mro(Child(Base1,Base2)) = [ Child ] + merge( mro(Base1), mro(Base2), [ Base1, Base2] )(其中Child繼承自Base1, Base2)

如果繼承至一個(gè)基類(lèi):class B(A)

這時(shí)B的mro序列為

mro( B ) = mro( B(A) )
= [B] + merge( mro(A) + [A] )
= [B] + merge( [A] + [A] )
= [B,A]

如果繼承至多個(gè)基類(lèi):class B(A1, A2, A3 …)

這時(shí)B的mro序列

mro(B) = mro( B(A1, A2, A3 …) )
= [B] + merge( mro(A1), mro(A2), mro(A3) ..., [A1, A2, A3] )
= ...

計(jì)算結(jié)果為列表,列表中至少有一個(gè)元素即類(lèi)自己,如上述示例[A1,A2,A3]。merge操作是C3算法的核心。

4.2.2. 表頭和表尾

表頭:

列表的第一個(gè)元素

表尾:

列表中表頭以外的元素集合(可以為空)

示例

列表:[A, B, C]

表頭是A,表尾是B和C

4.2.3. 列表之間的+操作

+操作:

[A] + [B] = [A, B]
(以下的計(jì)算中默認(rèn)省略)

merge操作示例:

如計(jì)算merge( [E,O], [C,E,F,O], [C] )
有三個(gè)列表 : ① ② ③

1 merge不為空,取出第一個(gè)列表列表①的表頭E,進(jìn)行判斷
各個(gè)列表的表尾分別是[O], [E,F,O],E在這些表尾的集合中,因而跳過(guò)當(dāng)前當(dāng)前列表
2 取出列表②的表頭C,進(jìn)行判斷
C不在各個(gè)列表的集合中,因而將C拿出到merge外,并從所有表頭刪除
merge( [E,O], [C,E,F,O], [C]) = [C] + merge( [E,O], [E,F,O] )
3 進(jìn)行下一次新的merge操作 ......

以上知識(shí)點(diǎn)大家有沒(méi)有學(xué)會(huì)么?感謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Python 爬取淘寶商品信息欄目的實(shí)現(xiàn)

    Python 爬取淘寶商品信息欄目的實(shí)現(xiàn)

    這篇文章主要介紹了Python 爬取淘寶商品信息欄目的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Python圖片存儲(chǔ)和訪問(wèn)的三種方式詳解

    Python圖片存儲(chǔ)和訪問(wèn)的三種方式詳解

    在?Python?中處理圖像數(shù)據(jù)的時(shí)候,例如應(yīng)用卷積神經(jīng)網(wǎng)絡(luò)等算法可以處理大量圖像數(shù)據(jù)集,這里就需要學(xué)習(xí)如何用最簡(jiǎn)單的方式存儲(chǔ)、讀取數(shù)據(jù)。本文介紹了Python中圖片存儲(chǔ)和訪問(wèn)的三種方式,需要的可以參考一下
    2022-04-04
  • python async with和async for的使用

    python async with和async for的使用

    這篇文章主要介紹了python async with和async for的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 詳解django中url路由配置及渲染方式

    詳解django中url路由配置及渲染方式

    這篇文章主要介紹了詳解django中url路由配置及渲染方式,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • 運(yùn)行獨(dú)立 pyspark 時(shí)出現(xiàn) Windows 錯(cuò)誤解決辦法

    運(yùn)行獨(dú)立 pyspark 時(shí)出現(xiàn) Windows 錯(cuò)誤解決辦法

    在本篇文章里小編給大家分享的是一篇關(guān)于運(yùn)行獨(dú)立 pyspark 時(shí)出現(xiàn) Windows 錯(cuò)誤解決辦法,對(duì)此有需求的方法可以參考下。
    2021-12-12
  • Python讀取URL生成PDF的方法步驟

    Python讀取URL生成PDF的方法步驟

    URL(Uniform Resource Locator)是用于標(biāo)識(shí)和定位網(wǎng)絡(luò)上資源的字符串,本文將給大家介紹Python讀取URL生成PDF的方法步驟,文中有相關(guān)的代碼示例和圖文講解供大家參考,需要的朋友可以參考下
    2024-07-07
  • Python?文檔解析lxml庫(kù)的使用詳解

    Python?文檔解析lxml庫(kù)的使用詳解

    lxml 是 Python 常用的文檔解析庫(kù),能夠高效地解析 HTML/XML 文檔,常用于 Python 爬蟲(chóng),這篇文章主要介紹了Python?文檔解析:lxml庫(kù)的使用,需要的朋友可以參考下
    2022-09-09
  • Python圖像處理模塊ndimage用法實(shí)例分析

    Python圖像處理模塊ndimage用法實(shí)例分析

    這篇文章主要介紹了Python圖像處理模塊ndimage用法,結(jié)合實(shí)例形式分析了Python圖像處理模塊ndimage基本功能及常見(jiàn)的圖形運(yùn)算操作實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-09-09
  • Python與數(shù)據(jù)庫(kù)的交互問(wèn)題小結(jié)

    Python與數(shù)據(jù)庫(kù)的交互問(wèn)題小結(jié)

    這篇文章主要介紹了Python與數(shù)據(jù)庫(kù)的交互,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • Python的gevent框架的入門(mén)教程

    Python的gevent框架的入門(mén)教程

    這篇文章主要介紹了Python的gevent框架的入門(mén)教程,示例代碼基于Python2.x版本,需要的朋友可以參考下
    2015-04-04

最新評(píng)論