物件導向例項化流程分析

2021-08-19 16:52:37 字數 1724 閱讀 3059

class

myclass

(object):

def__new__

(cls):

print("__new__")

return super(myclass, cls).__new__(cls)

def__init__

(self):

print("__init__")

def__call__

(self):

print("__call__")

if __name__ == "__main__":

obj = myclass()

obj()

結果為:

__new__

__init__

__call__

new()是在新式類中新出現的方法,它作用在構造方法建造例項之前,可以這麼理解,在python 中 存在於類裡面的構造方法init()負責將類的例項化,而在init()啟動之前,new()決定是否 要使用該init()方法,因為new()可以呼叫其他類的構造方法或者直接返回別的物件來作為本類 的例項。

說明:1.定義myclass類,myclass類繼承object類,因為需要重寫myclass類的new()函式,所以需要繼myclass承object基類,成為新式類,經典類沒有new()函式;

2.子類在重寫new()函式時,寫return時必須返回有繼承關係的類的new()函式呼叫,即上面**中的object類,則重寫myclass類的new()函式,寫return時,只能返回super(myclass, cls).new(cls)或者object.new(cls)

4.myclass類的new()函式會在例項化時被呼叫,自動執行其中的**語句,但是重寫new()函式不會影響類的例項化結果,myclass類的例項化物件就是myclass類的,而不會成為object類的例項化物件

5.new()函式確定了類的引數的個數,object類預設定義的new()函式的引數為(cls, *more),但如果在子類中重寫了new(cls, x), 則例項化類時,需要傳入乙個x引數,而init()函式接受到的有兩個引數,乙個是例項化生成的例項物件self代替,乙個是傳入的實參x的值;

init()的用法

init()是python的乙個構造方法,在定義類時,用於初始化的一些操作;它能實現的功能及原理相對來講也是比較簡單一點,就是在例項化該類時,自動執行init()方法定義的內容;但是注意init()一般不使用者返回return;

call()的用法

call()方法能夠讓類的例項物件,像函式一樣被呼叫;

js裡的物件導向分析 (建立例項化物件)

ecmascript 有兩種開發模式 1.函式式 過程化 2.物件導向 oop 物件導向的語言有乙個標誌,那就是類的概念,而通過類可以建立任意多個具有相同屬性和方法的物件。但是,ecmascript 沒有類的概念,因此它的物件也與基於類的語言中的物件有所不同。js本身是沒有class型別的,但是每個...

物件例項化過程分析

下面通過乙個簡單經典的demo演示下 class fu public void show class ziextends fu public void show public class test 執行結果 zi.run.0zi cons run1.8zi.run.8例項化步驟 1.jvm會讀取指定...

物件導向並進行例項化

在這裡插入 片建構函式的呼叫 class person name public型別的屬性 age 0 protected型別的屬性 id card private型別的屬性 建構函式 用於初始化類屬性 def init self,name pard,age pard,id card pard sel...