クラスの継承


クラスの継承は、クラス名の後に基本クラスのtupleを付けて作ります。

class C(A,B):
  ....

Pointクラスにメソッドを追加したPointAクラスを作ってみます。

 

# class PointA

class PointA(Point) :
    def __init__(self, x1, y1) :
        Point.__init__(self, x1, y1)
    def get(self) :
        return [self._Point__x, self._Point__y]
    def move(self, a, b) :
        self._Point__x += a
        self._Point__y += b
    def toString(self) :
        return str(self._Point__x) + ' ' + str(self._Point__y)
        
p1 = PointA(-1.0, 1.0)
print p1.get()
p1.move(2.0, 2.0)
print p1.toString()

 

コンストラクタではまず基本クラスのコンストラクタを呼び出します。基本クラスPointのコンストラクタは

Point.__init__(self, x1, y1)

とselfを最初の引数として呼び出します。これはインスタンス化のときの呼び出し方と異なることに注意してください。もし、この他独自の初期化処理が必要なら、この後にそのコードを記述します。

この例ではメソッドgetとmoveを追加したのですが、点の座標(メンバ変数)をprotectedとして使いたいので、self._Point__xなどどしてアクセスしています。この表現についてはプライベートメンバを参照してください。

また、この例ではtoStringメソッドをオーバーライドしています。メソッドは普通に同じ名前で再定義すればオーバーライドされます。