首頁>Club>
Python小白一枚,而且沒有程式設計背景,正在自學機器學習。目前努力嘗試把各種機器學習演算法用python來實現。 但是這兩天一直被_init_的用法卡住腳步,總是看不懂其使用方法,看了很多網上資料也沒弄清意思。
8
回覆列表
  • 1 # 留德華叫獸

    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.namep2.age

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

    2,不使用_init_方程

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

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

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

    class Anything: def init_person(self, _name, _age): self.name= _nameself.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.namea2.age

    來檢視它的名字和年齡。

    倆點注意處:

    1.這個叫Dick的人其實是init_person()這個方程“創造”的。

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

    def init_dog(self, _color, _age):self.color = _colorself.age = _age

    這個時候,如果我們執行

    a2.init_dog("Black", 4)

    那麼,a2這個成員又變成了一條4歲的黑色的狗!

  • 2 # 9點10分

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

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

  • 3 # 易學智慧

    變數"先定義再使用"VS"使用時定義"

    但它的缺點也是明顯的,不夠靈活,用起來總感覺條條框框太多、不那麼爽。

    Python在靈活性上有了極大提升。它對變數(包括普通變數、類成員)支援”使用時定義“的模式。第一次使用時就預設定義。

    這麼一搞,大神們是玩的爽了。經常是一行Python程式碼,C語言要忙成狗寫一大篇,才能完成相同功能。

    但是,這種搞法的缺點也出來了。一段程式,到底有多少個變數,都不容易搞明白。對一個類,有多少成員變數,也不容易搞清楚。

    2. 類init方法的一點認識

    但是,我們必須明白,Python的靈活性是骨子裡的,即使用了init,你仍然可以在類的方法實現體中,透過類似於"self.xx=aa"的語句,引入新的成員變數xx。所以,除非類的作者嚴格遵從”所有成員變數均在init中定義“的規範,否則你仍然不能只看init就確定一個類的全部成員變數。

    3. 寫在最後
  • 4 # 飛飛丿灬

    通俗點就是:類的構造方法 。 不懂? 定義一個人類,

    class person:

    def __init__(self,name,age):

    self.name=name

    self.age=age

    一個表示人的類完成,每個人是不是有名字和年齡?那麼你在建立人的例項的時候python會呼叫init方法,等於說你在建立人必須要傳名字和年齡不然你的人就建立不了。作用就是建立例項的時候初始化例項的屬性

  • 5 # 羅偉航76976475

    _init_是用來對例項的屬性進行初使化的,如定義一個類的時候,我們把初始的量放在裡面,那麼就不會使整個類看起來很雜亂。

    或者參考:https://blog.csdn.net/qq_36534861/article/details/78794223

  • 6 # zhangyiant

    __init__從面嚮物件語言的角度說,這個成為constructor,在一個物件例項產生的時候,必須初始化內部環境,這個內部環境最常用的就是成員變數。

  • 中秋節和大豐收的關聯?
  • 透過劉鑫和江歌事件,你對友情有什麼新的看法?