練習問題

10.8 練習問題

本章で習った内容を元に練習問題を解いてください。

問1 次の設問①~⑤について○か×で答えなさい。

設問
① スーパークラスからは1つしかサブクラスを作成できない。
② 2つ以上スーパークラスを継承したサブクラスを作成できない。
③ サブクラスはスーパークラスの変数、メソッドを全て継承して利用することができる。
④ サブクラス内でスーパークラスと同じ定義のメソッドを記述することはできない。
⑤ 抽象クラスを継承したサブクラスは、抽象メソッドをオーバーロードしなくて良い。

問2 以下のクラスについて説明をした設問について○か×で答えなさい。

1class X (Y):
2    s = 45
3 
4    def __init__(self,s):
5    super().__init__(‘s’)
6    super.z = null
7    self.s = s
8 
9    def m():
10        super().n

設問
① クラスXがクラスYのスーパークラスになる。
② クラスYにsという変数があるとコンパイルエラーになる。
③ クラスYに引数ありのコンストラクタが定義されている必要がある。
④ クラスYにnというメソッドが定義されている必要がある。
⑤ クラスYにmというメソッドが定義されていなくてもよい。

問3 以下に示すソースコードを実行した時の、結果①~⑧に入る文字を答えなさい。

ソースコード

ソース・フォルダー: /Desktop/Python基礎講座
ファイル名: 第10章.ipynb
アクセスURL: http://localhost:8888/notebooks/Desktop/Python基礎講座/第10章.ipynb

1class SampleA:
2 
3    def __init__(self,a):
4        print('[クラスSampleA]の',a,'のコンストラクタ')
5 
6class SampleB(SampleA):
7 
8    def __init__(self,a,b):
9        super().__init__(a)
10        print('[クラスSampleB]の',b,'のコンストラクタ')
11 
12sb1 = SampleB('a1','b1')
13sb2 = SampleB('a2','b2')

実行結果

1クラスSample[①]の[②]のコンストラクタ
2クラスSample[③]の[④]のコンストラクタ
3クラスSample[⑤]の[⑥]のコンストラクタ
4クラスSample[⑦]の[⑧]のコンストラクタ

問4 以下に示すクラスBooksを継承した以下の仕様をもつ、TextBooksクラスを作成しなさい。

ソースコード

ソース・フォルダー: /Desktop/Python基礎講座
ファイル名: 第10章.ipynb
アクセスURL: http://localhost:8888/notebooks/Desktop/Python基礎講座/第10章.ipynb

1class Books:
2 
3    def __init__(self,title='未定',price=0):
4        self.__title = title
5        self.__price = price
6        print('本を作成しました。')
7 
8    #ゲッターの定義
9    @property
10    def getTitle(self):
11        return self.__title
12 
13    #セッターの定義
14    @getTitle.setter
15    def setTitle(self,value):
16        self.__title = value
17        print('この本のタイトルは' + self.__title +'にしました。')
18 
19    #ゲッターの定義
20    @property
21    def getPrice(self):
22        return self.__price
23 
24    #セッターの定義
25    @getPrice.setter
26    def setPrice(self,value):
27        self.__price = value
28        print('この本の価格は' + str(self.__price) + '円にしました。')

作成仕様

Booksクラスを継承するTextBooksクラスを生成する

①コンストラクタ
Booksのコンストラクタを継承する。
__subjectというインスタンス変数があり、コンストラクタの引数subjectが代入されるものとする。

②メソッド
メソッド名:getSubject
デコレータ:@property
引数:selfのみ
戻り値:インスタンス変数__subject
概要:インスタンス変数__subjectの値を戻り値として返す。

メソッド名:setSubject
デコレータ:@getSubject.setter
引数:self、value
戻り値:なし
概要:

引数で受け取った教科情報をインスタンス変数__subjectに設定する。
「この本の教科をXXXXにしました。」と画面に出力処理を行う。
※XXXXは引数の値

問5 問4で作成したBooksクラスを抽象クラスに書き換え、抽象メソッドを付けたせるようソースコードを書き換えなさい。またTextBooksクラスで付け加えた抽象クラスをオーバーロードしなさい。

ソースコード

ソース・フォルダー: /Desktop/Python基礎講座
ファイル名: 第10章.ipynb
アクセスURL: http://localhost:8888/notebooks/Desktop/Python基礎講座/第10章.ipynb

作成仕様

【Books1クラス】
① クラス事態を抽象クラスに書き換える
② 以下の抽象メソッドを付け加える
メソッド名: showBook
引数: self
戻り値: なし
概要: pass

【TextBooks】 ① 以下のメソッドを付け加える メソッド名: showBook 引数: self 戻り値: なし 概要:以下の様に出力されるメソッドである。

※△△にはインスタンス変数__subject、××にはインスタンス変数__title、●●にはインスタンス変数__priceが代入される


NEXT>> 10.9 練習問題 解答

f