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

Python中實(shí)例化class的執(zhí)行順序示例詳解

 更新時(shí)間:2018年10月14日 15:01:42   作者:bingo  
這篇文章主要給大家介紹了關(guān)于Python中實(shí)例化class的執(zhí)行順序的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

本文主要介紹了關(guān)于Python實(shí)例化class的執(zhí)行順序的相關(guān)內(nèi)容,下面話不多說了,來一起看看詳細(xì)的介紹吧

Python里對(duì)類的實(shí)例化時(shí)有怎樣的順序

一般來說一個(gè)類里面有類變量和方法,比如我們定義一個(gè)名為A的類

class A():
 bar = "my lover love me"
 
 def __init__(self, name):
  print('A的class' ,self.__class__, name)

我們?cè)谶@個(gè)類里面定義了一個(gè)類變量bar和一個(gè)構(gòu)造方法__init__,那么我們實(shí)例化A()時(shí)都發(fā)生了什么呢!看官不要急,聽我慢慢道來...

  • 首先,python 調(diào)用內(nèi)置的type類,沒有聽錯(cuò),就是我們平時(shí)用來測(cè)引用類型的那個(gè)type,然后type調(diào)用內(nèi)置的元類mateClass,mateClass再調(diào)用__new__方法將類實(shí)例化,此時(shí)完成了第一步
  • 然后,這個(gè)實(shí)例將會(huì)初始化自己的類變量,就是把自己從頭到尾掃視一遍,
  • 之后,進(jìn)入構(gòu)造方法,并初始化自己的實(shí)例變量。

注意:python中類變量和實(shí)例變量是不一樣的,
類變量:不用實(shí)例化也可以訪問。
實(shí)例變量:是動(dòng)態(tài)創(chuàng)建的。必須實(shí)例化之后才可以訪問,因?yàn)橹笆遣淮嬖诘摹?/p>

比如下面這個(gè)例子:不實(shí)例化訪問類變量

class A():
 a = 2
print(A.a)

輸出:

>>>2

說了這么多,上代碼??纯搭惱^承時(shí)怎么運(yùn)行的:

class A():
 def __init__(self, name):
  print('A的class' ,self.__class__, name)
  
class B(A):
 def __init__(self, name):
  self._name = name
  A.__init__(self, name)
  print('B的class', self.__class__, name)
 print('this is B class')
  
class C(B):
 def __init__(self, name):
  B.__init__(self, name)
  print('C的class')
  
if __name__ == '__main__':

c = C('lee')

輸出如下:

this is B class
A class <class '__main__.C'> lee
B class <class '__main__.C'> lee
C class

來現(xiàn)身說法,解釋一波

  • 首先對(duì)class C()進(jìn)行實(shí)例化,從頭到尾掃一遍,然后進(jìn)入C()的構(gòu)造,遇到了父類C()的構(gòu)造方法B.__init__ 。
  • 進(jìn)入class B(),從頭到尾掃一遍,執(zhí)行了print('this is B class')語句然后進(jìn)入B()的構(gòu)造,遇到了父類B()的構(gòu)造方法A.__init__。
  • 進(jìn)入class A(),從頭到尾掃一遍,然后進(jìn)入A()的構(gòu)造方法A.__init__。然后A.__init__執(zhí)行完畢并彈出棧,class A()執(zhí)行完畢并彈出棧。
  • 回到class B(),從上次未執(zhí)行完的地方print('B的class', self.__class__, name)繼續(xù)執(zhí)行。然后B.__init__執(zhí)行完畢并彈出棧,class B()執(zhí)行完畢并彈出棧。
  • 回到class C(),從上次未執(zhí)行完的地方print('C的class')繼續(xù)執(zhí)行。然后C.__init__執(zhí)行完畢并彈出棧,class C()執(zhí)行完畢并彈出棧。程序運(yùn)行完畢。
  • 由于是對(duì)class C()進(jìn)行實(shí)例化,上面的self都是指class C()的實(shí)例而不是class A()的或者class B()的。因此self.__class__清一色的顯示<class '__main__.C'>而不是<class '__main__.A'><class '__main__.B'> 。

隨便補(bǔ)充一下使用type關(guān)鍵字動(dòng)態(tài)創(chuàng)建類的知識(shí)點(diǎn),敲黑板、、、我要用CET3.5的英語水平向大家翻譯一部分官方文檔對(duì)type的描述啦。

使用三個(gè)參數(shù),返回一個(gè)新類型對(duì)象。這實(shí)際上是類語句的動(dòng)態(tài)形式。名稱字符串是類名,并成為__name__屬性;基元元組列出基類并成為>__bases__屬性;并且dict字典是包含類主體定義的命名空間,并被復(fù)制到標(biāo)準(zhǔn)字典以成為__dict__屬性。

怎么樣,是不是很拗口,是不是大寫的懵*。so,上代碼,以下兩種寫法輸出一樣的都是輸出:重寫name方法 1

class X():
 a = 1
 def __name__(self):
 return '重寫name方法' 
x =X()
print(x.__name__(), x.a)
X = type('重寫name方法', (object,), dict(a = 1))
x = X()
print(X.__name__, x.a)

type動(dòng)態(tài)創(chuàng)建實(shí)例化時(shí),第一個(gè)參數(shù)就相當(dāng)于重寫了類的__name__方法。X類但__name__屬性卻不叫X,呵,好反人類的寫法
還好我們一般不是這么變態(tài),通常我們會(huì)將這兩個(gè)定義成相同的名字,如下:都叫X
X = type('X', (object,), dict(a = 1))

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • python使用difflib實(shí)現(xiàn)自動(dòng)查重

    python使用difflib實(shí)現(xiàn)自動(dòng)查重

    Python中有許多現(xiàn)成的庫和工具,可以方便地實(shí)現(xiàn)自動(dòng)查重的功能,其中,difflib庫就是一個(gè)專門用于比較文件和字符串差異的庫,下面我們就來看看如何利用difflib實(shí)現(xiàn)自動(dòng)查重吧
    2023-11-11
  • Python3 翻轉(zhuǎn)二叉樹的實(shí)現(xiàn)

    Python3 翻轉(zhuǎn)二叉樹的實(shí)現(xiàn)

    這篇文章主要介紹了Python3 翻轉(zhuǎn)二叉樹的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 淺談tensorflow模型保存為pb的各種姿勢(shì)

    淺談tensorflow模型保存為pb的各種姿勢(shì)

    這篇文章主要介紹了淺談tensorflow模型保存為pb的各種姿勢(shì),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • python3人臉識(shí)別的兩種方法

    python3人臉識(shí)別的兩種方法

    這篇文章主要為大家詳細(xì)介紹了python3人臉識(shí)別的兩種方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法

    TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法

    這篇文章主要介紹了TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Django中URL視圖函數(shù)的一些高級(jí)概念介紹

    Django中URL視圖函數(shù)的一些高級(jí)概念介紹

    這篇文章主要介紹了Django中URL視圖函數(shù)的一些高級(jí)概念,Django是Python重多人氣框架中最為著名的一個(gè),需要的朋友可以參考下
    2015-07-07
  • Python開發(fā)編碼規(guī)范

    Python開發(fā)編碼規(guī)范

    Python開發(fā)編碼規(guī)范...
    2006-09-09
  • 解決使用export_graphviz可視化樹報(bào)錯(cuò)的問題

    解決使用export_graphviz可視化樹報(bào)錯(cuò)的問題

    今天小編就為大家分享一篇解決使用export_graphviz可視化樹報(bào)錯(cuò)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Pygame?Font模塊使用教程

    Pygame?Font模塊使用教程

    文本是任何一款游戲中不可或缺的重要要素之一,本文將主要介紹Pygame中Font模塊的使用教程,例如文本的繪制、顯示等,感興趣的同學(xué)可以了解一下
    2021-11-11
  • python 實(shí)現(xiàn)批量替換文本中的某部分內(nèi)容

    python 實(shí)現(xiàn)批量替換文本中的某部分內(nèi)容

    今天小編就為大家分享一篇python 實(shí)現(xiàn)批量替換文本中的某部分內(nèi)容,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12

最新評(píng)論