抽象基底クラス
次のコードを実行したときの出力として、正しいものを1つ選べ。
from abc import ABC, abstractmethod
class Base(ABC):
@abstractmethod
def run(self): ...
try:
Base()
except TypeError:
print("TypeError")
- A
何も出力されない。
- B
NotImplementedError - C
AttributeError - D
TypeError
正解と解説を見る
正解:D
ABC と @abstractmethod で、サブクラスが実装すべきメソッドを強制できる。抽象メソッドが残るクラスは、インスタンス化できない。
| 順 | 実行する行 | 実行後の変数 |
|---|---|---|
| 1 | `from abc import ABC, abstractmethod` | — |
| 2 | `class Base(ABC):` | — |
| 3 | └ `def run(self): ...` | — |
| 4 | └ `@abstractmethod` | — |
| 5 | └ `def run(self): ...` | — |
| 6 | └ `@abstractmethod` | — |
| 7 | └ `def run(self): ...` | — |
| 8 | `try:` | — |
| 9 | `Base()` | — |
| 10 | `except TypeError:` | — |
| 11 | `print("TypeError")` | — |
| 分岐 | `except TypeError:` | 実行される |
| 結果 | 実際の出力 | TypeError |
- A
誤り。インスタンス化で
TypeErrorが発生する。 - B
誤り。インスタンス化の時点で
TypeError。 - C
誤り。属性の問題ではない。
- D
正しい。抽象メソッドが未実装のクラスは、インスタンス化できない。
このサイトの問題は、各試験の公式に示された出題範囲に沿って作ったオリジナルの模擬問題です。本試験の問題ではありません。一般社団法人Pythonエンジニア育成推進協会の公式サービスではありません。