Python init 理解與學習

2022-08-02 20:33:07 字數 1753 閱讀 9135

python是物件導向的程式語言,因此我從class、instance以及屬性(property/attribute)的角度出發解釋。

_init_根據其英文意思(initialize),用來初始化乙個類(class)的新成員(instance),它是乙個constructor.

當新成員被建立時,這個方程會自動被呼叫。

僅舉倆個(極端的)例子作對比,為了不複雜化導致混淆,建議只看1~

1,使用_init_方程

我們建立了乙個叫做「人類」(person)的類別,他有倆個必要屬性(property):性別(gender)和年齡(age)

有了_init_函式,每次我們建立人類這個類別的新的成員(instance)時,我們就必須賦予gender和age這倆個引數--否則新的成員不能稱作為「人類」~

(注:self是乙個指向物件的指標)

請看程式執行案例:

可以看到,當我輸入

p1=person()
程式報錯了,因為要建立乙個人類新成員,你就必須輸入性別和年齡這倆個必要選項。

而當我輸入

p2=person('james', 10)
程式執行成功了,乙個10歲的名叫james的人類新成員被建立成功!

並且你可以通過輸入

p2.name

p2.age

來檢視這位新成員的名字和年齡。

2,不使用_init_方程

是不是一定要使用_init_方程呢?

當然不是,但是,沒有了這個方程,類別和成員的概念就變得稍許模糊。

下面我們建立了乙個叫做anthing(任何生物)的類別,該類別沒有「屬性」,有乙個方程init_person以及方程的倆個變數name和age。

這個類沒有_init_方程,因此,建立新成員a2時,我們不需要輸入任何的「屬性」引數

a2=anything()
這也導致了這個類定義的模糊--這個類別下的新成員a2到底是神馬?(這裡我們叫它anything)

反而,當我們在建立新成員試圖輸入「名字」和「年齡」這倆個「屬性」時,程式報錯了。

a1=anything('dick', 5)
因此,我們建立了乙個我們對它毫無認知的新成員a2。

但是,這個類裡有乙個方程叫做「建立人類成員」(init_person),並且它有倆個輸入變數「名字」和「年齡」。

我們嘗試呼叫這個方程把a2「變成」乙個人類:

a2.init_person('dick', 5)、
編譯通過了,a2變成了乙個5歲的叫dick的人類。

並且你可以通過輸入

a2.name

a2.age

來檢視它的名字和年齡。

倆點注意處:

1.這個叫dick的人其實是init_person()這個方程「創造」的。

2. 在anything這個類下,我們還可以定義其他方程

def init_dog(self, _color, _age):

self.color = _color

self.age = _age

這個時候,如果我們執行

a2.init_dog('black', 4)
那麼,a2這個成員又變成了一條4歲的黑色的狗!

Ajax ajax學習與理解

1.新建demo.aspx頁面。2.首先在該頁面的後台檔案demos.aspx.cs中新增引用。using system.web.services 3.無引數的方法呼叫.大家注意了,這個版本不能低於.net framework 2.0。2.0已下不支援的。後台 webmethod public st...

NAT學習與理解

nat 網路位址轉換 cisco篇 在一台路由器上對進或出流量進行ip位址的修改 常用規則為從內部去往外部時修改源ip位址 從外部進入內部時修改目標ip位址 靜態nat 位址間的對映關係為固定 動態nat,臨時位址對映 流量從內部去往外部時,將內部本地位址修改為內部全域性位址 從外部進入內部時,將內...

遷移學習實踐與理解

出於硬體條件以及資料集 的限制,我從一開始就想到了遷移學習的方法,利用已經訓練成熟的模型去做調整。遷移學習有很多方式,可以大致分為三種 利用模型結構 提取瓶頸特徵 bottleneck features 微調 fine tuning 利用模型結構 這個是最基礎的遷移學習,只利用別人的模型框架,所有權...