Python3 – クラス

クラスの定義

標準形

  • クラス定義は、class [クラス名]:で始める
  • コンストラクタ名は__init__で決まっている(前後にアンダースコア2つ)
  • クラス変数(プロパティ)はコンストラクタで定義して明示

関数定義と同じく、クラスからオブジェクトを生成するときは、クラスを定義した後でなければならない。

プロパティ

クラス変数(クラス・プロパティ)

クラス定義の直下で定義された変数はクラス変数となり、全てのインスタンスを通じて同じ値が参照される。一般的には[クラス名].[クラス変数名]で用いる。

インスタンス変数(インスタンス・プロパティ)

インスタンス変数は、コンストラクタで定義して明示する。

インスタンス生成後にプロパティを定義することもできるが、あるインスタンスで定義したプロパティはそのクラスの他のインスタンスにはいきわたらない。

なお上記のpass文は、空のクラスのための構文。クラスの構文上は何か内容が必要なため、プレースホルダとしてpass文を置いている。passはPythonの予約語で、何も行わない。

インスタンス変数はpublic

Pythonのインスタンス変数は全てpublicアクセス可能。これを隠蔽するのに、以下の方法がある。

  1. クラス変数の先頭にアンダースコアを1つ付ける(_)
    • この方法は「作法」であり、普通に変数名を指定してアクセスが可能
  2. クラス変数の先頭にアンダースコアを2つ付ける(__)
    • この方法はPythonでアクセスが拒否される

ただし(2)の方法でも実はアクセスが可能。アンダースコア2つを前置した変数は、_クラス名__変数名に変換されるため、この変数名を使ってアクセスできる。

メソッド

コンストラクタ

  • コンストラクタの名前は__init__で決まっている
  • 少なくとも先頭に1つの、自己参照用の引数が必要
    • この引数の変数名は任意だが、Pythonの慣習でselfを用いることになっている

インスタンスメソッド

コンストラクタと同じく、インスタンスメソッドは最低1つの引数を持ち、第1引数はインスタンス自身への参照が渡される。

この引数の変数名は任意だが、Pythonの慣習でselfを用いることになっている。

クラスの継承

継承

基本的なクラスの継承方法は以下の手順による。

  1. 子クラスのclass宣言で親クラスを指定
  2. 子クラスのコンストラクタで親クラスのコンストラクタを呼ぶ
  3. 必要に応じて追加のプロパティを定義

オーバーライド

子クラスで親クラスのメソッドをオーバーライドできる。

親クラスのメソッドの呼び出し

子クラスでオーバーライドしたメソッドでも、親クラスの名前を指定して、親のメソッドを呼び出せる。

※super()メソッドを用いるべきか。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です