コンストラクタ(  init  )

コンストラクタ(__init__) #

クラスのコンストラクタについてを書く。
コンストラクタとはクラスのインスタンスを作成した時に、そのインスタンスで最初に実行される関数である。主に初期化のために使われる。
これも言語により呼び名が違うので注意。

Javaでは、クラス内でそのクラス名と同じ名前のメソッドを定義した時、それがコンストラクタになる。
引数を変えれば、多重定義(オーバーロード)でいくらでも定義できる。
ただし、コンストラクタを定義したら、インスタンス生成時に設定する引数はそのコンストラクタと同じでなければならない。
因みにコンストラクタは定義しなくても良い。その場合インスタンス生成時に設定する引数は無しでないといけない。

使用例を以下に示す。

class Car{

  String name = null;
  String number = null;
  String owner = null;

  public Car(String carname,String carnumber,String carowner) {
    this.name = carname;
    this.number = carnumber;
    this.owner = carowner;
  }
}

class Main{
  public static void main(String args[]){

    Car car1 = new Car("lexus","100-1010","ai-ueo");
    Car car2 = new Car("carrola","200-2020","kaki-kukeko");

    System.out.println("Car1:"+car1.name+" "+car1.number+" "+car1.owner);
    System.out.println("Car2:"+car2.name+" "+car2.number+" "+car2.owner);
  }
}

実行結果

> java Main
Car1:lexus 100-1010 ai-ueo
Car2:carrola 200-2020 kaki-kukeko

Pythonでは __init()__ という関数がクラスのコンストラクタの役目を果たす。
クラスのインスタンス生成後、真っ先にこの関数__init__が実行される。
大体はインスタンス変数を設定するために利用されることが多い。そのときは__init__の引数に、変数に設定したい値に加えてselfを追加することを忘れずに行う。

実行例を以下に示す。

>>> 
>>> class Car:
...     def __init__(self,carname,carnumber,carowner):
...             self.name=carname
...             self.number=carnumber
...             self.owner=carowner
... 
>>> car1 = Car("lexus","100-1010","ai-ueo") 
>>> car2 = Car("carrola","200-2020","kaki-kukeko") 
>>> 
>>> [car1.name,car1.number,car1.owner]  
['lexus', '100-1010', 'ai-ueo']
>>> [car2.name,car2.number,car2.owner] 
['carrola', '200-2020', 'kaki-kukeko']
>>>

JavascriptでのコンストラクタはJavaやPythonのそれとは対象が微妙に異なる。

まず、JavascriptにはJavaのクラスのといったデータ構造はないため、これに対するコンストラクタではない。

しかし、Javascriptでは関数がクラスのようなデータ構造を表せることがあり、コンストラクタとはこれに対してのコンストラクタである。

これを利用すると、関数の中身で指定されたプロパティを持ったオブジェクトが生成される。

例えば以下の関数があったとする。

var Person = function(name){
    this.name = name
}

この関数を、newキーワードを用いて別の変数に格納すると、変数にはオブジェクト型のデータが格納される。

var john = Person('john')
console.log(john.name)

実行結果

john

何が起きているのだろうか?実は、newキーワードを使うと、指定された関数は以下の処理が追加されたような挙動を示す。

var Person = function(name){
    //var this={}
    this.name = name
    //return this
}

newを追加することによって、関数をオブジェクトとして表すことが可能になる。

javascriptでは、このnewで指定された関数のことをコンストラクタと呼んでいる。また、コンストラクタにより生成されたオブジェクトをインスタンスと呼ぶ。