クラス継承
Pythonではクラスを継承して、既存クラスを容易に拡張することができます。
親クラスである「Country」を定義し「country_name」属性を保持します。さらに「City」を「Country」クラスを継承して定義し「city_name」属性を保持します。
# -*- coding: utf-8 -*-
class Country:
def __init__(self, country_name):
self.country_name = country_name
class City(Country):
def __init__(self, country_name, city_name):
Country.__init__(self, country_name)
self.city_name = city_name
classes = []
classes.append(City('Japan', 'Tokyo'))
classes.append(City('USA', 'Washington, D.C.'))
for cls in classes:
print "===== Class ====="
print 'country_name --> ' + cls.country_name
print 'city_name --> ' + cls.city_name
--実行結果--
===== Class ===== country_name --> Japan city_name --> Tokyo ===== Class ===== country_name --> USA city_name --> Washington, D.C.
既存クラスの継承を行って新たにクラスを定義する場合、クラス名の後に「 () 」を用いてスーパークラス名を記述します(例示コードの場合はCountry、9行目)。また親クラスが持つメソッドと同じ名前のメソッドを定義することができ、その処理内容を上書きすることができます。例示のコードの場合、12行目で親クラスの同名メソッドを呼び出すことにより親が行っている処理をそのまま利用しつつ、子クラス側で独自の処理を追加しています。子クラス側では「country_name」属性に対して値を代入していないにもかかわらずprintで出力できているのも、親クラス側でその処理を行っているからです。
なお本項で示したクラスは「旧スタイルクラス」です。次項の新旧クラススタイルも目を通しておくと良いでしょう。
objectを継承する?しない?
▶応用編:新旧クラススタイル
