今回は、オブジェクト指向の機能であるPythonのコンストラクタについて説明し、オブジェクトを初期化するために _init__メソッドをどのように使用するかについて詳しく説明します。
コンストラクタって何?
コンストラクタの考え方に入る前に、一般的なクラスとオブジェクトについて簡単に説明します。
「オブジェクトとは、開発者が作成した抽象的なデータ型のことです。
オブジェクトはパラメータ(状態値)と振る舞い(メソッド)によって定義/特徴付けされます。
クラスは、特定のタイプのオブジェクトを構築するための青写真または指示のセットです。
コンストラクタは、オブジェクトの初期化/生成時に呼び出される特別なメソッドとして理解することができます。
コンストラクタは通常、クラス定義の関数として定義され、状態パラメータを受け取り、それらのユーザー定義パラメータでオブジェクトを作成します。
Pythonでは、コンストラクタのメソッドは _init ____() で、次のように記述されます。
def __init__( self , object_parameters...):
# Initialize the object
|
この関数は self とオブジェクトのパラメータを入力として受け取ります。
オブジェクトパラメータはその名の通り、オブジェクトを定義する状態変数です。
self は python の予約語であり、クラスのインスタンスを表します。
selfキーワードはクラスのメソッドやパラメータに簡単にアクセスでき、クラスの他のメソッドで使用することができます。
例えば、オブジェクトの状態変数’var’には self.var を使ってアクセスすることができます。
この考え方は、クラスを作成する例を見れば、より明確になるでしょう。
この記事もチェック:Pythonでの変数の定義やスコープ、削除、globalキーワードを解説していく
シンプルなクラスを作成します。デカルト点
この例では、2D Cartesian Point のクラスを作成します。
このクラスは、点の位置を定義する x と y という2つの状態変数を持っています。
class Point:
def __init__( self , x, y):
self .x = x
self .y = y
def coords( self ):
print ( "The point is at: ({}, {})" . format ( self .x, self .y))
|
このクラスは、点の位置を定義するxとyの2つの状態変数を持ち、_init_()メソッドは self と二つの状態変数を受け付けます。
オブジェクトの状態変数をユーザーが定義した値に設定し、オブジェクトを初期化します。
オブジェクトの状態変数(ここでは x と y)にはそれぞれ self.x と self.y を使ってアクセスすることができます。
もう1つのメソッドは、ポイントの現在位置を表示する coords() です。
self.xとself.yを使用してポイントにアクセスしていることに注目してください。
# Create object `P` of class Point with value 3 and 4 P = Point1( 3 , 4 )
# Print the coordinates of point `P` P.coords() |
class Point1:
def __init__( self , x = 0 , y = 0 ):
self .x = x
self .y = y
def coords( self ):
print ( "The point is at: ({}, {})" . format ( self .x, self .y))
# Create object of class Point1 with default parameters Q = Point1()
Q.coords() |
Default Variables in _init_() メソッド
Pythonの他の関数と同じように、the s_init_Thailand() メソッドはデフォルト値を取ることができます。
この機能は、クラスが多くの入力パラメータを受け取る場合に特に有効です。
ここでは、データポイントが指定されていない場合、ポイントを (0, 0) に初期化する別のクラス Point1 を作成します。
まとめ
Pythonクラスのコンストラクタを定義する方法について見てきました。
これは最も現実的で簡単な方法ですが、これが唯一の方法ではないことがわかりました。
Pythonではもっと複雑なクラスの初期化が可能で、特に他のクラスを継承したり拡張したりするときに重要になります。
このような例については、今後の記事で詳しく見ていきます。