練習問題 解答

4.6 練習問題 解答

問1

① ○
② ○
③ ×:クラス変数はオブジェクト共通の情報なのでアクセスは可能です。
④ ×:クラス変数はクラス自身に関連付けられるため、オブジェクトには関連付けられない。
⑤ ×:インスタンス変数は、インスタンスメソッドからアクセスできるが、クラスメソッドからはアクセスできない。

問2

① クラスメソッドの第一引数clsが抜けている。:×count → 〇cls.count
② インスタンス変数の参照する際に、インスタンスメソッドの第一引数selfが抜けている。:×num、distance → 〇self.num、self.distance
③ インスタンスメソッドをインスタンスを介さずに直接呼び出している。:×Car.showInformation() → 〇car1.showInformation()

問3

1class Book:
2    count = 0
3    #コンストラクタの定義
4    def __init__(self,title,price):
5        self.title = title
6        self.price = price
7        Book.count += 1
8        self.number = Book.count

問4

1class Book2:
2    count = 0
3    #コンストラクタの定義
4    def __init__(self,title,price):
5        self.title = title
6        self.price = price
7        Book2.count += 1
8        self.number = Book2.count
9 
10    def showBook(self):
11        print('この本のタイトルは',self.title,'価格は',self.price,'円です。')
12        print('生成番号は',self.number,'です。')
13 
14    @classmethod
15    def getCount(cls):
16        return cls.count

問5

1class Book3:
2#問4の内容を記載
3    count = 0
4    #コンストラクタの定義
5    def __init__(self,title,price):
6        self.title = title
7        self.price = price
8        Book3.count += 1
9        self.number = Book3.count
10 
11    def showBook(self):
12        print('この本のタイトルは',self.title,'価格は',self.price,'円です。')
13        print('生成番号は',self.number,'です。')
14 
15    @classmethod
16    def getCount(cls):
17        return cls.count
18 
19#3回for文開始
20for i in range(3):
21    #タイトルの入力
22    title = input('本のタイトルを入力してください')
23    #価格の入力
24    price = input('本の価格を入力してください')
25    #title、priceを引数にクラスBook3からインスタンスbook1を生成
26    book1 = Book3(title,price)
27    #インスタンスbook1を介してshowBookメソッドを実行
28    book1.showBook()
29 
30#インスタンスの生成回数を表示
31print('本の生成回数は',Book3.getCount(),'回です。')

NEXT>> 第5章 アクセスの制限とカプセル化

f