Python 模擬試験

Python基礎 模擬試験 第2回 問32・9章 クラス(クラスとインスタンス)

クラス変数の共有

次のコードを実行したときの出力として、正しいものを1つ選べ。

class Dog:
    tricks = []
    def add_trick(self, trick):
        self.tricks.append(trick)

d = Dog()
e = Dog()
d.add_trick("roll over")
e.add_trick("play dead")
print(d.tricks)
  1. A

    ['roll over']

  2. B

    ['roll over', 'play dead']

  3. C

    ['play dead']

  4. D

    []

正解と解説を見る

正解:B

クラス変数はすべてのインスタンスで共有され、インスタンス変数は __init__ などで self に設定する。

順実行する行実行後の変数
1`class Dog:`—
2└ `tricks = []`tricks = []
3└ `def add_trick(self, trick):`—
4`d = Dog()`—
5`e = Dog()`—
6`d.add_trick("roll over")`—
7└ `self.tricks.append(trick)`trick = 'roll over'
8`e.add_trick("play dead")`—
9└ `self.tricks.append(trick)`trick = 'play dead'
10`print(d.tricks)`—
結果実際の出力['roll over', 'play dead']

学習のポイント:ミュータブルなクラス変数を共有してしまう落とし穴を押さえる。

この問題を演習で解く →

問題一覧へ

このサイトの問題は、各試験の公式に示された出題範囲に沿って作ったオリジナルの模擬問題です。本試験の問題ではありません。一般社団法人Pythonエンジニア育成推進協会の公式サービスではありません。