Pythonコンストラクターを宣言するには、二重アンダースコア(__init__
)(PythonのDunderまたはmagicメソッド)を使用する必要があります。
基本的なカスタマイズ:
__init__
インスタンスが作成された後に呼び出され、__new__
作成されたオブジェクトをカスタマイズするために使用されます。
インスタンスが作成された後(new()によって)、呼び出し元に返される前に呼び出されます。引数は、クラスコンストラクター式に渡される引数です。基本クラスにinit()メソッドがある場合、派生クラスのinit()メソッドがある場合は、インスタンスの基本クラス部分が適切に初期化されるように、明示的に呼び出す必要があります。例:super()。init([args ...])。
new()とinit()はオブジェクトの構築で連携して機能するため(new ()で作成し、init ()でカスタマイズ)、 init()でNone以外の値を返すことはできません。これを行うと、実行時にTypeErrorが発生します。
Pythonには2種類のコンストラクタがあります。
- デフォルトのコンストラクター:パラメーター化されたコンストラクターを宣言しない場合に使用されます。その定義には、構築中のインスタンス(別名
self
)への参照である引数が1つだけあります。
def __init__(self):
# default constructor
- パラメーター化されたコンストラクター:パラメーターに加えて他のパラメーターを取り
self
ます。
def __init__(self, parameters):
# parameterized constructor
パラメーター化されたコンストラクターを宣言しない場合、Pythonはパラメーターを受け取らないデフォルトのコンストラクターを使用します。そのため、デフォルトのコンストラクターに引数を渡したところ、例外がスローされました。
それを修正する方法は?
インスタンスをインスタンス化できるパラメーター化されたコンストラクターを宣言するだけです。
Python3:
class Person:
def __init__(self, name):
self.name = name