幾個類的內建方法

2022-06-22 22:54:18 字數 3227 閱讀 8052

#

類的內建方法

#雙下方法

#__str__

#當類中定義了__str__方法後,print(這個類物件時),會呼叫__str__. 或者格式化%s輸出物件時,都會觸發__str__

#__repr__

#當類中定義了__repr__方法後,print(repr(a)),就會呼叫a物件中的__repr__()方法。格式化輸出用%r時同樣會呼叫__repr__

#同樣物件中如果沒有定義__repr__方法,那麼就會呼叫父類中的__repr__

#__repr__是__str__的備胎,str不能做repr的備胎,當類內部沒有定義str時,想要呼叫類的str方法,則會呼叫repr方法

#如果沒有__str__方法,會先找本類中的__repr__方法,如果還沒有找到再從父類中的__str__找,沒有再找__repr,但object基類肯定定義了這兩個方法

#repr(),只會找__repr__,如果沒有__repr__則會找父類的__repr__

#object裡有乙個__str__,一旦被呼叫,就返**用物件的記憶體位址

#print(物件) # 列印乙個物件的時候,就是呼叫物件.__str__,如果物件中沒有定義__str__方法,則會呼叫基類object中的__str__,就會列印物件的記憶體位址

class

a:

def__init__

(self, name):

self.name =name

def__str__(self): #

此類定義的物件,被格式化%s輸出或者print列印時或print(str(obj))會觸發此方法

return'a

'def

__repr__(self): #

此類定義的物件,被格式化%r輸出或者print列印時或print(repr(obj)),會觸發此方法

return str(self.__dict__

)a = a('

why'

)print(a) #

a 如果沒有定義__str__方法,則會呼叫父類object的__str__

print(str(a)) #

a 如果沒有定義__str__方法,則會呼叫父類object的__str__

print('

%s : %s

' % ('

a', a)) #

a : a # 格式化輸出物件a,也會呼叫a的__str__

print(repr(a)) #

print('

%r' % a) #

#析構函式 __del__

class

a:

def__init__

(self):

self.name = '

why'

def__del__

(self):

print('

執行我了')

a =a()

del a #

呼叫此方法後,先執行析構函式__del__方法,之後刪除了這個物件.如果自己沒有刪除,在程式執行結束後,直譯器會進行析構刪除

#__call__

#乙個物件obj,如果obj()就會呼叫__call__方法

class

a:

def__init__

(self):

self.name = '

why'

def__call__

(self):

print('

執行我了')

a = a() #

a() #

執行我了 # 呼叫了物件__call__方法

#

__getitem__\__setitem__\__delitem__ # 使用字典的形式操作物件的屬性

class

foo:

def__init__

(self, name):

self.name =name

def__getitem__

(self, item):

return self.__dict__

[item]

def__setitem__

(self, key, value):

self.

__dict__[key] =value

def__delitem__

(self, key):

print('

del obj[key]時, 我執行')

self.

__dict__

.pop(key)

def__delattr__

(self, item):

print('

del obj.key 時,我執行')

self.

__dict__

.pop(item)

f1 = foo('sb'

)f1[

'age

'] = 18 #

呼叫了類的__setitem__方法,增加了乙個屬性age,值為18

f1['

age1

'] = 19 #

實際呼叫了__setitem__方法

print(f1['

age1

']) #

19 # 實際呼叫了__getitem__方法

del f1.age1 #

3 del obj.key 時,我執行

del f1['

age'] #

del obj[key]時, 我執行

#

__new__

class

a:

def__init__

(self):

self.x = 1

print('

in init function')

def__new__(cls, *args, **kwargs): #

此方法才是例項化時,先被呼叫的方法,此方法造出了self,一般我們不用實現

print('

in new function')

return object.__new__(a, *args, **kwargs)

a = a() #

in new function

#in init function

類的內建方法

前後帶槓槓的都是特殊的內建函式 會在某些時機自動執行 一般情況我們不應該直接呼叫他們 當我們需要自定義列印顯示內容時 就需要實現 str 方法 該方法 必須 返回乙個字串 返回的是什麼 列印出來就是什麼 class test def init self,name self.name name def...

物件導向 幾個內建方法

首先class類裡的內建方法,比如 call str 這些都是在一定條件下自動執行的。下面我們來介紹幾個內建方法 1 str 先講講他的作用,在print列印物件的時候會自動觸發執行 例子1 class student def init self,name,age self.name name se...

python 類的內建方法

1.doc 列印類的備註 class animal object 建立動物類 def run self 動物都會跑 pass a animal 列印animal類的備註 print a.doc 2.call 將類進行例項化後,呼叫該例項時,會執行 call 方法。注意 類中無 call 方法時,例項...