python中的__str__ __name__ 和__call__方法
生活随笔
收集整理的這篇文章主要介紹了
python中的__str__ __name__ 和__call__方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
通過__str__( )函數可以打印對象的屬性信息,方便我們調試代碼。
#通過__str__( )函數可以打印對象的屬性信息,方便我們調試代碼。class aa(object):def __init__(self,name,age):self.name = nameself.age = agedef __str__(self):return self.name + str(self.age) #這里返回的是字符串不是int類型,要轉化tom = aa("小三",18) print(tom) print(tom.name)打印結果: 小三18 小三python中的__name__
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:579817333 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' def index():print("9999")index() f = index print(index.__name__) #得到的是函數名 print(f.__name__)運行結果: index indexpython中的__call__
在Python中,__ init__()函數的意義等同于類的構造器(同理,__ del__()等同于類的析構函數)。因此,__ init__()方法的作用是創建一個類的實例。
__ call __ ()
Python中的函數是一級對象。這意味著Python中的函數的引用可以作為輸入傳遞到其他的函數/方法中,并在其中被執行。
而Python中類的實例(對象)可以被當做函數對待。也就是說,我們可以將它們作為輸入傳遞到其他的函數/方法中并調用他們,正如我們調用一個正常的函數那樣。而類中__call__()函數的意義正在于此。為了將一個類實例當做函數調用,我們需要在類中實現__call__()方法。也就是我們要在類中實現如下方法:def __ call__(self, *args)。這個方法接受一定數量的變量作為輸入。
假設x是X類的一個實例。那么調用x.__ call__(1,2)等同于調用x(1,2)。這個實例本身在這里相當于一個函數。
總結
那么,__ init __ ()和__call__()的區別如下:
本身類對象調用函數是 :對象.函數名,
class Foo(object):def __init__(self, a, b, range):self.a = aself.b = bself.range = rangedef add(self,a,b):print("a+b的值為:%d"%(a+b))def __call__(self, a, b):self.a = aself.b = bprint('打印call方法({}, {})'.format(self.a, self.b))x1 = Foo(1, 2, 3)#實例化一個對象 print(x1) #<__main__.Foo object at 0x000002A0A593A3C8>x1.add(3,5) #對象.函數名 #打印結果為:a+b的值為:8 x1(1,2) #打印結果為:打印call方法(1, 2) ####將一個類實例對象當做函數調用,直接執行__call__方法總結
以上是生活随笔為你收集整理的python中的__str__ __name__ 和__call__方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python初学的几个迷惑点
- 下一篇: python元编程详解