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 で解説されています。