Python入門 クラスの継承とオーバーライド(動画あり)

lecture
スポンサーリンク

クラスの継承

クラスの継承とはクラスが持つ変数とメソッドを引き継いで(継承して)新しいクラスを作る仕組みです。

新しいクラスを作成するときに、既存のクラスが有効に使える場合も多いです。例えばAnimalクラスを作成しておいて、それを元にPersonクラスを作成するとコードの量を減らすことができます。

継承元のクラス:スーパークラス
継承先のクラス:サブクラス

スーパークラスとサブクラスの書き方
class Fruits:
  pass

class Apple(Fruits):
  pass

passとは:passは何も実行することがないという意味です。passを使うことで何も記述しないでエラーになることを防ぎます。
関数名、クラス名は決まっているが、実装がまだ明確でないときや、if文のelse 節で使ったりする場合もあります。

クラス継承の例

class Animal: 
  kind = '動物'
  def animal_print(self):
    print('{}クラスです'.format(self.kind))


class Parson(Animal):
  name = '人間'
  def person_print(self):

インスタンス化の例

animal = Animal() # スーパークラスのインスタンス化

animal.animal_print()
animal.kind

結果
動物クラスです
‘動物’

サブクラスやスーパクラスからのメソッドや属性の呼び出し例

#サブクラスのインスタンスからサブクラスの属性呼び出し
person = Parson() # サブクラスのインスタンス化

person.animal_print() #サブクラスのインスタンスからスーパークラスのメソッド呼び出し
person.person_print() #サブクラスのインスタンスからサブクラスのメソッド呼び出し
print(person.kind) #サブクラスのインスタンスからスーパークラスの属性呼び出し
print(person.name) #サブクラスのインスタンスからサブクラスの属性呼び出し

結果
動物クラスです
人間クラスです
動物
人間

継承の特徴

継承はis-a関係にあります。

is-aの関係とは
Apple is a fruit.
「リンゴはフルーツである」の関係にあるものが継承を行う際のポイントになります。

コンストラクタを含んだ継承

# Animalクラスを継承したクラス作成
class Animal:
  def __init__(self, name):
    self.name = name
  def hello(self):
    print('Hello',self.name)
 
class Cat(Animal):
  def jump(self):
    print(self.name, 'はジャンプした') 
animal = Animal('キョロ')animal.hello() cat = Cat('ニャンコ')cat.hello()cat.jump()
animal = Animal('キョロ')
animal.hello()

cat = Cat('ニャンコ')
cat.hello()
cat.jump()

結果
Hello キョロ
Hello ニャンコ
ニャンコ はジャンプした

オーバーライド

スーパークラスとサブクラスで同じ名前のメソッドを作るとサブクラスのメソッドが優先されて上書きした状態になります。 このことをオーバーライドと言います。

オーバーライドの例

class English:
  def hello(self):
    print('Hello')

class Japanese(English):
  def hello(self):
    print('こんにちは')
english = English()
english.hello()

結果
Hello

japanese = Japanese()
japanese.hello()

結果
こんにちは

class Display:
  def __init__(self):
    print('挨拶するよ')
    
  def hello(self):
    print('Hello',end=' ')
    
class DecoDisplay(Display):
  def hello(self, sentence):
    super().hello()
display = Display()
display.hello()

結果
挨拶するよ
Hello

deco = DecoDisplay()
deco.hello('Python')

結果挨拶するよ
Hello Python

参考になった書籍

プログラミングを少しでも経験がありPython の文法を学習する場合は、「入門 Python 3」が良いと思います。長く使えます。

「退屈なことはPython にやらせよう」はオブジェクト指向の解説がないです。代わりにPythonを使った便利な実例が初心者には嬉しい内容です。正規表現から、簡単なスクレイピング 、画像操作などあります。ただし、中級者以上には少し物足りないかもしれません。

Pythonサンプルのダウンロード

ここでダウンロードする「object2.ipynb」ファイルは、このPython動画で使用したものです。

object2.ipynb

Python入門一覧

タイトルとURLをコピーしました