python中初始化例項屬性

2022-06-23 23:15:13 字數 1965 閱讀 9278

雖然我們可以自由地給一個例項繫結各種屬性,但是,現實世界中,一種型別的例項應該擁有相同名字的屬性。例如,person類應該在建立的時候就擁有 name、gender 和 birth 屬性,怎麼辦?

在定義 person 類時,可以為person類新增一個特殊的__init__()方法,當建立例項時,__init__()方法被自動呼叫,我們就能在此為每個例項都統一加上以下屬性:

class

person(object):

def__init__

(self, name, gender, birth):

self.name =name

self.gender =gender

self.birth = birth

__init__() 方法的第一個引數必須是 self(也可以用別的名字,但建議使用習慣用法),後續引數則可以自由指定,和定義函式沒有任何區別。

相應地,建立例項時,就必須要提供除 self 以外的引數:

xiaoming = person('

xiao ming

', '

male

', '

1991-1-1')

xiaohong = person('

xiao hong

', '

female

', '

1992-2-2

')

有了__init__()方法,每個person例項在建立時,都會有 name、gender 和 birth 這3個屬性,並且,被賦予不同的屬性值,訪問屬性使用.操作符:

print

xiaoming.name

#輸出 'xiao ming'

print

xiaohong.birth

#輸出 '1992-2-2'

要特別注意的是,初學者定義__init__()方法常常忘記了 self 引數:

>>> class

person(object):

...

def__init__

(name, gender, birth):

...

pass

...

>>> xiaoming = person('

xiao ming

', '

male

', '

1990-1-1')

traceback (most recent call last):

file

"", line 1, in

typeerror:

__init__() takes exactly 3 arguments (4 given)

這會導致建立失敗或執行不正常,因為第一個引數name被python直譯器傳入了例項的引用,從而導致整個方法的呼叫引數位置全部沒有對上。

示例:定義person類的__init__方法,除了接受 name、gender 和 birth 外,還可接受任意關鍵字引數,並把他們都作為屬性賦值給例項。

class

person(object):

def__init__(self,name,gender,birth,**kw):

self.name=name

self.gender=gender

self.birth=birth

self.kw=kw

xiaoming = person('

xiao ming

', '

male

', '

1990-1-1

', job='

student')

print

xiaoming.name

print xiaoming.kw

結果:

xiao ming

Python list 初始化技巧

1 1 遞增列表 初始化遞增的list,與l i for i in range 10 效果相同 l range 10 版本變化 l i for i in range 10 print l 0 1 2 3 4 5 6 7 8 9 1 0 常數0列表 初始化每項為0的一維列表 method 1 l 0 ...

直接初始化和複製初始化

1 classtest ct1 ab 這條語句屬於直接初始化,它不需要呼叫複製建構函式,直接呼叫建構函式classtest const ch...

ABP初始化

預設認為你手中已經有abp zero專案,當前4 6 0 ps mpa 在這裡是多頁面的意思 namespace mycompanyname...