-
1 # 留德華叫獸
-
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,在一個物件例項產生的時候,必須初始化內部環境,這個內部環境最常用的就是成員變數。
Python小白一枚,而且沒有程式設計背景,正在自學機器學習。目前努力嘗試把各種機器學習演算法用python來實現。
但是這兩天一直被_init_的用法卡住腳步,總是看不懂其使用方法,看了很多網上資料也沒弄清意思。
回覆列表
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歲的黑色的狗!