Python のクラスの使い方

Python のクラスの使い方をご紹介します。

定義

クラスは class クラス名(継承したいクラス名): という形で定義します。

class MyClass(ParentClass):
    """Myclass for ...
    """

    def __init__(self, name, x, y):
        self.name = name
        self.x = x
        self.y = y

    def getX(self):
        return self.x

この例では

  • MyClass: クラス名
  • ParentClass: 継承したいクラス名
  • x: アトリビュート
  • y: アトリビュート
  • __init__: メソッド
  • getX: メソッド

となります。

派生クラスと基底クラスということばを使うなら MyClass が派生クラスで ParentClass が基底クラスです。ちなみに、 ParentClass をこのように継承する場合は、 MyClass の定義よりも前(上)の部分で ParentClass を定義しておく必要があります。

Python 2 で基底クラスを指定しない場合は、 () (かっこ)の中身に何も書かず class MyClass() とするか、 object というクラスを入れて class MyClass(object) とします。

def ~ の部分はメソッドの定義です。インスタンスメソッドの第一引数は必ず self (そのインスタンス自身)を入れることになっています。

ここで定義されているふたつのメソッドのうち、 getX は通常のメソッドですが、 __init__ はその用途が決められている特殊メソッドです。 __init__ はインスタンス生成時の処理を指定するメソッドです。

インスタンスの生成

上の例のように __init__ を定義した場合、インスタンスは次のように生成します。

mc1 = MyClass('Voyager', 10, 5)

__init__ の定義文に書かれている引数のうち、self以外の引数をすべて与えてあげます。この場合では

  • mc1.name に 'Voyager'
  • mc1.x に 10
  • mc1.y に 5

が格納されます。

__init__ のほかにも __str____le__ などの特殊メソッドが数多く用意されており、公式ドキュメントの 特殊メソッドについて説明したパート にまとめて紹介されています。

私はほとんど使ったことがないので馴染みがないのですが、インスタンスメソッドではなく「クラスメソッド」を定義したい場合は次のように書けばよいようです。

@classmethod
def f(cls, arg1, arg2, ...):
    ...

クラスメソッドに関する公式ドキュメントはこちらにあります。

最後に、 class MyClass(ParentClass): の一行下の """My Class for ... """ はクラスの説明文を書くところです。一般に「 docstring 」と呼ばれ、 クラス名.__docs__ に格納されます。 docstring について詳しくは、 PEP 257 で解説されています。