#類的內建方法
#雙下方法
#__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 方法時,例項...