ホーム >  Python >  Pythonの継承


Posted:2018/04/03 9:00:34 AM|Category : Python

Pythonの継承

Pythonの継承の基本的な使い方を調べてみます。

継承とは?

「継承」は、あるクラスを元に別名の派生クラスを定義することです。継承はPythonのみならず、オブジェクト指向プログラミング言語に共通する考え方です。

継承の使用例

以下のようにクラスを記述します。

class Base:
    basevalue = "base"
    def handle(self):
        print("Base.handle()")

    def wheel(self):
        print("wheel")

class Derived(Base):
    def handle(self):
        print ("Derived.handle()")
        self.wheel()

derived = Derived()
print("{0}".format(derived.basevalue))
derived.wheel()

以下のような結果が表示されます。

base
wheel

解説

class Base:

基底クラス(スーパークラス)を定義します。

class Derived(Base):

基底クラスの変数とメソッドを引き継ぐ派生クラス(サブクラス)を定義します。

derived.wheel()

派生クラスである「Derived」には「.wheel()」メソッドが存在しません。しかし、派生クラス(Derived)は基底クラス(Base)の変数とメソッドを継承しているため、基底クラスのメソッド(.wheel())を利用することができます。

多重継承

class A:
    def method(self):
        print("class A")

class B:
    def method(self):
        print("class B")

class C(A):
    def method(self):
        print("class C")

class D(B,C):
    pass

d = D()
d.method()

出力結果はclass Bになります。

class B

解説

class D(B,C):

クラスDは、クラスBとクラスCの複数のクラスを継承します。

class D(B,C):
    pass

クラス内にpassと記述すると何もしないクラスを作成できます。(めったに使用しません。)

d = D()
d.method()

クラスDのオブジェクトdのメソッドmethod()を呼び出すと、クラスDの基底クラスBとCのうち、先に記述されているクラスBのメソッドmethod()が呼び出され、”class B”が出力されます。

class B:
    pass

出力結果:

class C

クラスBをクラスDと同様passのみ記述すると、基底クラスBにはメソッドmethod()が存在しません。そのため、クラスCのメソッドmethod()が呼び出され、出力結果は”class C”になります。

class C:
    pass

出力結果:

class A

クラスCにもpassを記述します。すると、クラスCの基底クラスであるクラスAのメソッドmethod()が呼び出され、”class A”が出力されます。

※クラスAをpassのみ記述すると、どのクラスにもmethod()が存在しないので例外が発生します。

複雑な多重継承を作ると、メソッドの検索順序を決定できないため、エラーになることがあります。不必要に多重継承することはやめましょう。


トラックバック用のURL
プロフィール

名前:イワサキ ユウタ 職業:システムエンジニア、ウェブマスター 誕生:1986年生まれ 出身:静岡県 特技:ウッドベース 略歴 2008年04月 金融機関系I

最近の投稿
人気記事
カテゴリー
広告