国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

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

2020-02-15 23:12:02
字體:
供稿:網(wǎng)友

前言

本文主要介紹了關(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 = 2print(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__清一色的顯示
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新河县| 宜宾市| 博客| 元谋县| 内丘县| 宁海县| 重庆市| 冕宁县| 东台市| 岳池县| 会同县| 孟津县| 六枝特区| 清丰县| 三河市| 赣榆县| 嘉定区| 基隆市| 三原县| 岳西县| 天全县| 桂林市| 武平县| 元谋县| 瓦房店市| 西乡县| 乾安县| 泸溪县| 册亨县| 大石桥市| 邵阳县| 龙胜| 博湖县| 徐水县| 岑溪市| 开原市| 德庆县| 苗栗市| 湖南省| 南京市| 甘孜|