Python 模擬試験

Python実践 模擬試験 第4回 問13・4章 Pythonのクラス(特殊メソッド)

__eq__ と __hash__

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

class P:
    def __init__(self, v):
        self.v = v
    def __eq__(self, o):
        return self.v == o.v
print(P(1) == P(1), P.__hash__ is None)
  1. A

    True True

  2. B

    True False

  3. C

    False True

  4. D

    False False

正解と解説を見る

正解:A

__eq__ を定義すると、既定では __hash__ が None になり、集合の要素や辞書のキーにできなくなる。必要なら __hash__ も定義する。

順実行する行実行後の変数
1`class P:`—
2└ `def __init__(self, v):`—
3└ `def __eq__(self, o):`—
4`print(P(1) == P(1), P.__hash__ is None)`—
5└ `self.v = v`(2回)self = P(vars={'v': 1}), v = 1
6└ `return self.v == o.v`self = P(vars={'v': 1}), o = P(vars={'v': 1})
結果実際の出力True True

学習のポイント:dataclass(frozen=True) は、両方を自動で定義する。

この問題を演習で解く →

問題一覧へ

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