Pythonでクラスの継承の仕方を練習したのでメモしておく.
以下のようにして, ClassA と ClassB を定義する.
class ClassA(object):
def __init__(self,x):
self.x= x
def multi(self):
return self.x *self.x
class ClassB(ClassA):
def multi(self):
return super(ClassB,self).multi() *self.xこれを実行すると,以下のように狙い通りクラスの継承およびオーバーライドができていることが分かる. :
>>> a= ClassA(10)
>>> print a.x
10
>>> print a.multi()
100
>>> b= ClassB(5)
>>> print b.x
5
>>> print b.multi()
125
注意すべきは,
- 上書きされた関数
multi()のみが変更を受けている. ClassBにおいて変更する必要のない関数は (__init__であっても) 書く必要はない.勝手に継承される.- 元となる
ClassAでobjectを継承しないとsuperが使えない. - python 3 以降では,単に
super()とすればよいらしいが,2.7とかでは上のように冗長的に書く必要があるらしい.第二引数のselfはレシーバと呼ばれるらしい.