美文网首页我爱编程
Python中的__init__()和__call__()函数

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

作者: 耀凯考前突击大师 | 来源:发表于2018-04-13 01:52 被阅读84次

    在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)
    

    相关文章

      网友评论

        本文标题:Python中的__init__()和__call__()函数

        本文链接:https://www.haomeiwen.com/subject/vxuqkftx.html