練習問題 解答

4.6 練習問題 解答

問1

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

問2

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

問3

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

問4

    class Book2:
        count = 0
        #コンストラクタの定義
        def __init__(self,title,price):
            self.title = title
            self.price = price
            Book2.count += 1
            self.number = Book2.count

        def showBook(self):
            print('この本のタイトルは',self.title,'価格は',self.price,'円です。')
            print('生成番号は',self.number,'です。')

        @classmethod
        def getCount(cls):
            return cls.count
	

問5

    class Book3:
    #問4の内容を記載
        count = 0
        #コンストラクタの定義
        def __init__(self,title,price):
            self.title = title
            self.price = price
            Book3.count += 1
            self.number = Book3.count

        def showBook(self):
            print('この本のタイトルは',self.title,'価格は',self.price,'円です。')
            print('生成番号は',self.number,'です。')

        @classmethod
        def getCount(cls):
            return cls.count

    #3回for文開始
    for i in range(3):
        #タイトルの入力
        title = input('本のタイトルを入力してください')
        #価格の入力
        price = input('本の価格を入力してください')
        #title、priceを引数にクラスBook3からインスタンスbook1を生成
        book1 = Book3(title,price)
        #インスタンスbook1を介してshowBookメソッドを実行
        book1.showBook()

    #インスタンスの生成回数を表示
    print('本の生成回数は',Book3.getCount(),'回です。')
	

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