0Pricing
Python Academy · レッスン

単一継承

親クラスの属性とメソッドを継承する子クラスを作成します。

「単一継承」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。

導入

継承を使うと、子クラスは親クラスの動作をコードの重複なしで再利用し、拡張できます。

子クラスの定義

class Dog(Animal): は Animal からすべてを継承します。子クラスは新しいメソッドを追加したり、既存のメソッドをオーバーライドしたりできます。
class Animal:
    def __init__(self, name): self.name = name
    def speak(self): return '...'
class Dog(Animal):
    def speak(self): return 'Woof'
d = Dog('Rex')
print(d.name, d.speak())

super().__init__の呼び出し

super().__init__(args) は親クラスの __init__ を呼び出します。親クラスに初期化処理がある場合は、子クラスで必ず呼び出します。
class Animal:
    def __init__(self, name): self.name = name
class Dog(Animal):
    def __init__(self, name, breed):
        super().__init__(name)
        self.breed = breed
d = Dog('Rex', 'Labrador')
print(d.name, d.breed)

メソッドの継承

子クラスは親クラスのすべてのメソッドを継承します。オーバーライドしなければ、そのまま動作します。
class Vehicle:
    def start(self): return 'starting'
class Car(Vehicle):
    pass
print(Car().start())

メソッドのオーバーライド

子クラスで同じメソッド名を定義すると、親クラスのバージョンを置き換えられます。子クラスのバージョンが呼び出されます。
class Shape:
    def area(self): return 0
class Square(Shape):
    def __init__(self, s): self.s = s
    def area(self): return self.s**2
print(Square(4).area())

親クラスの動作の拡張

オーバーライド内で super().method() を呼び出すと、まず親クラスのバージョンを実行してから、処理を追加できます。
class Animal:
    def describe(self): return 'I am an animal'
class Dog(Animal):
    def describe(self): return super().describe() + ' and a dog'
print(Dog().describe())

isinstance()とissubclass()

isinstance(obj, Parent) は子クラスのインスタンスに対しても True を返します。issubclass(Child, Parent) はクラス階層を確認します。
class Animal: pass
class Dog(Animal): pass
d = Dog()
print(isinstance(d, Animal))
print(issubclass(Dog, Animal))

子クラスによる新しいメソッドの追加

子クラスでは、親クラスにないまったく新しいメソッドを定義できます。
class Animal:
    def __init__(self, name): self.name = name
class Dog(Animal):
    def fetch(self): return f'{self.name} fetches!'
print(Dog('Rex').fetch())

保護された属性

_name という慣例は「クラスの外部からアクセスしない」ことを示します。サブクラスでは使用できます。
class Animal:
    def __init__(self, name): self._name = name
    def name(self): return self._name
class Dog(Animal):
    def bark(self): return f'{self._name} barks'
print(Dog('Rex').bark())

抽象基底クラス

from abc import ABC, abstractmethod によって、サブクラスにメソッドの実装を強制できます。
from abc import ABC, abstractmethod
class Shape(ABC):
    @abstractmethod
    def area(self): pass
class Circle(Shape):
    def __init__(self, r): self.r = r
    def area(self):
        import math
        return math.pi * self.r**2
print(Circle(3).area())

__bases__と__mro__

Dog.__bases__ は直接の親クラスを示します。Dog.__mro__ は完全なメソッド解決順序を示します。
class A: pass
class B(A): pass
class C(B): pass
print(C.__mro__)

確認問題

子クラスで super().__init__() を呼び出すと、何が起こりますか?

復習

継承は class Child(Parent) の形で定義します。super() で親クラスにアクセスします。動作を変更するにはメソッドをオーバーライドします。isinstance() で階層を確認します。ABC は抽象的な契約の実装を強制します。

続けましょう

すばらしい進歩です!次の概念を身につけるために、そのまま続けましょう。

よくある質問

「単一継承」レッスンは無料ですか?

はい。「単一継承」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。

「単一継承」で何を学びますか?

親クラスの属性とメソッドを継承する子クラスを作成します。 ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Python Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「単一継承」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPython Academyレッスンでコードを書いて実行できますか?

はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 単一継承
  2. メソッドのオーバーライドと super()
  3. 多重継承と MRO
  4. ポリモーフィズムとダックタイピング
← Python Academyに戻る