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
に 10mc1.y
に 5
が格納されます。
__init__
のほかにも __str__
、 __le__
などの特殊メソッドが数多く用意されており、公式ドキュメントの 特殊メソッドについて説明したパート にまとめて紹介されています。
私はほとんど使ったことがないので馴染みがないのですが、インスタンスメソッドではなく「クラスメソッド」を定義したい場合は次のように書けばよいようです。
@classmethod
def f(cls, arg1, arg2, ...):
...
クラスメソッドに関する公式ドキュメントはこちらにあります。
最後に、 class MyClass(ParentClass):
の一行下の """My Class for ... """
はクラスの説明文を書くところです。一般に「 docstring 」と呼ばれ、 クラス名.__docs__
に格納されます。 docstring について詳しくは、 PEP 257 で解説されています。