Python中的__init__()和__call__()函數

來源:互聯網
上載者:User

在Python的class中有一些函數往往具有特殊的意義。__init__()和__call__()就是class很有用的兩類特殊的函數。 __init__()

在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__()的區別如下:
1. __init__()的作用是初始化某個類的一個執行個體。
2. __call__()的作用是使執行個體能夠像函數一樣被調用,同時不影響執行個體本身的生命週期(__call__()不影響一個執行個體的構造和析構)。但是__call__()可以用來改變執行個體的內部成員的值。

class X(object):    def __init__(self, a, b, range):        self.a = a        self.b = b        self.range = range    def __call__(self, a, b):        self.a = a        self.b = b        print('__call__ with ({}, {})'.format(self.a, self.b))    def __del__(self, a, b, range):        del self.a        del self.b        del self.range
>>> xInstance = X(1, 2, 3)>>> xInstance(1,2)__call__ with (1, 2)
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.