python通俗解讀 Python中 init

2021-10-13 13:46:08 字數 1693 閱讀 4735

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

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

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

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

1,使用_init_方程

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

class person: def __init__(self, name, age): self.name = name self.age = 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。class anything:

def init_person(self, _name, _age):

self.name= _name

self.age = _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歲的黑色的狗!

馬氏距離通俗解讀

基礎知識 假設空間中兩點x,y,定義 歐幾里得距離,mahalanobis距離,不難發現,如果去掉馬氏距離中的協方差矩陣,就退化為歐氏距離。那麼我們就需要 這個多出來的因子究竟有什麼含義。例子 如果我們以厘公尺為單位來測量人的身高,以克 g 為單位測量人的體重。每個人被表示為乙個兩維向量,如乙個人身...

SVM最通俗的解讀

摘自 什麼是svm?當然首先看一下wiki.support vector machines are learning models used for classification which individuals in a population belong where?so how do svm...

貝葉斯網路的通俗解讀

貝葉斯網路首先是一張 圖 graph 注意graph這個詞翻譯成中文是 圖 但是 圖 這個詞對應的英文可多了,image draw photo paint graph,每個詞的引申意都不一樣。graph的引申意是 類似拓撲結構的東西繪製成的一張圖。也就是由 節點 和 邊 組成的一種 圖 狀資料結構。...