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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python实例化是什么意思_Python中实例化class的执行顺序示例详解

發布時間:2023/12/4 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python实例化是什么意思_Python中实例化class的执行顺序示例详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

本文主要介紹了關于Python實例化class的執行順序的相關內容,下面話不多說了,來一起看看詳細的介紹吧

Python里對類的實例化時有怎樣的順序

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

class A():

bar = "my lover love me"

def __init__(self, name):

print('A的class' ,self.__class__, name)

我們在這個類里面定義了一個類變量bar和一個構造方法__init__,那么我們實例化A()時都發生了什么呢!看官不要急,聽我慢慢道來...

首先,python 調用內置的type類,沒有聽錯,就是我們平時用來測引用類型的那個type,然后type調用內置的元類mateClass,mateClass再調用__new__方法將類實例化,此時完成了第一步

然后,這個實例將會初始化自己的類變量,就是把自己從頭到尾掃視一遍,

之后,進入構造方法,并初始化自己的實例變量。

注意:python中類變量和實例變量是不一樣的,

類變量:不用實例化也可以訪問。

實例變量:是動態創建的。必須實例化之后才可以訪問,因為之前是不存在的。

比如下面這個例子:不實例化訪問類變量

class A():

a = 2

print(A.a)

輸出:

>>>2

說了這么多,上代碼??纯搭惱^承時怎么運行的:

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 lee

B class lee

C class

來現身說法,解釋一波

首先對class C()進行實例化,從頭到尾掃一遍,然后進入C()的構造,遇到了父類C()的構造方法B.__init__ 。

進入class B(),從頭到尾掃一遍,執行了print('this is B class')語句然后進入B()的構造,遇到了父類B()的構造方法A.__init__。

進入class A(),從頭到尾掃一遍,然后進入A()的構造方法A.__init__。然后A.__init__執行完畢并彈出棧,class A()執行完畢并彈出棧。

回到class B(),從上次未執行完的地方print('B的class', self.__class__, name)繼續執行。然后B.__init__執行完畢并彈出棧,class B()執行完畢并彈出棧。

回到class C(),從上次未執行完的地方print('C的class')繼續執行。然后C.__init__執行完畢并彈出棧,class C()執行完畢并彈出棧。程序運行完畢。

由于是對class C()進行實例化,上面的self都是指class C()的實例而不是class A()的或者class B()的。因此self.__class__清一色的顯示而不是或 。

隨便補充一下使用type關鍵字動態創建類的知識點,敲黑板、、、我要用CET3.5的英語水平向大家翻譯一部分官方文檔對type的描述啦。

使用三個參數,返回一個新類型對象。這實際上是類語句的動態形式。名稱字符串是類名,并成為__name__屬性;基元元組列出基類并成為>__bases__屬性;并且dict字典是包含類主體定義的命名空間,并被復制到標準字典以成為__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動態創建實例化時,第一個參數就相當于重寫了類的__name__方法。X類但__name__屬性卻不叫X,呵,好反人類的寫法

還好我們一般不是這么變態,通常我們會將這兩個定義成相同的名字,如下:都叫X

X = type('X', (object,), dict(a = 1))

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對我們的支持。

本文標題: Python中實例化class的執行順序示例詳解

本文地址: http://www.cppcns.com/jiaoben/python/241665.html

總結

以上是生活随笔為你收集整理的python实例化是什么意思_Python中实例化class的执行顺序示例详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。