pythonクラスの_init__()関数と_call()__関数#カンスウ#

1425 ワード

Pythonのclassにはいくつかの関数が特殊な意味を持つことが多い.init__()と_call__()はclassが役に立つ2種類の特殊な関数です.
__init__()Pythonで、_init__()関数の意味はクラスのコンストラクタ(同理,_del_()はクラスの構造関数に等しい)に等しい.よって、_init__()メソッドの役割は、クラスのインスタンスを作成することです.
__call__()Pythonの関数は1級オブジェクトです.これは、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)

----------------------原文:https://blog.csdn.net/Yaokai_AssultMaster/article/details/70256621