python建立物件的過程

2021-10-04 17:52:17 字數 1307 閱讀 2763

剛學物件導向的時候,其他啥也沒記住,就記住乙個__init__方法,當時就感覺這方法很牛皮,能搞乙個物件出來,但是直到有一天手賤點object原始碼看,才發現自己一直都是錯的。

create and return new object,人家清清楚楚的寫著,是我建立的物件。

那行吧,我隱約的認識到是__new__建立的物件,__init__只是賦了屬性,

以**為準,自己搞一下來看看

classa(

object):

def__new__

(cls,

*args,

**kwargs)

:print

(cls.__name__)

#看看這個cls是誰

print

("是我建立的物件"

) a =

object

.__new__(cls)

#要依靠object基類的方法

a.name =

"a"print(id

(a))

#看看這建立的物件是否與下邊例項化出來的物件是乙個東西

return a

def__init__

(self,age)

:print

(self.name)

#看看這個self是誰

self.age = age

print

("我負責給物件屬性"

) m = a(1)

print(id

(m))

執行結果:

來分析一下:

1.因為先出現"我建立的物件",所以__new__先於__init__執行

2.傳入__new__是a這個類,那麼呼叫object返回的物件就是a類的例項

3.__new__建立的物件的id與傳入__init__的物件的id以及類例項化之後的物件的id一樣,他們三個是同乙個東西

好了,到了這,基本流程我們也能看出來了:

首先乙個類例項化乙個物件時,先呼叫__new__來建立乙個物件(沒有任何屬性),之後__init__拿到這個物件後給物件屬性。

物件的建立過程

jvm查詢類的路徑,定位到.class檔案 載入.class檔案,有關靜態初始化的所有動作都會被執行 靜態初始化只在物件首次載入的時候進行一次 當用new建立物件的時候,在堆上為物件分配足夠的空間 儲存空間將會被初始化,自動為物件的所有基本資料型別設定成預設值,引用被置為null 執行所有出現於字段...

物件的建立過程

直接上 public class sup public sup static package com.test.resources public class sub extends sup public sub static public class test 父類靜態 塊 在父類的無參構造上面 父...

物件建立過程

過程一共有五步 類載入檢查 分配記憶體 初始化零值 設定物件頭 執行init 類載入檢查 檢查該物件所代表的的類是否已經被載入 解析和初始化過,沒有的話先執行類的載入過程 分配記憶體 在通過第一之後虛擬機器為物件分配記憶體。物件經過類載入之後大小就基本確定了,分配空間就是在堆中劃出一塊大小確定的記憶...