Python 模擬試験

Python実践 模擬試験 第5回 問26・9章 データ型とアルゴリズム(functools)

total_ordering

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

import functools
@functools.total_ordering
class A:
    def __init__(self, v):
        self.v = v
    def __eq__(self, o):
        return self.v == o.v
    def __lt__(self, o):
        return self.v < o.v
print(A(1) <= A(2), A(2) >= A(1))
  1. A

    True False

  2. B

    TypeError が発生する。

  3. C

    False False

  4. D

    True True

正解と解説を見る

正解:D

functools.total_ordering は、__eq__ と、__lt__・__le__・__gt__・__ge__ のどれか 1 つを定義すれば、残りの比較を自動で補う。

順実行する行実行後の変数
1`import functools`—
2`@functools.total_ordering`—
3`class A:`—
4└ `def __init__(self, v):`—
5└ `def __eq__(self, o):`—
6└ `def __lt__(self, o):`—
7`@functools.total_ordering`—
8`class A:`—
9`print(A(1) <= A(2), A(2) >= A(1))`—
10└ `self.v = v`(2回)self = A(vars={'v': 2}), v = 2
11└ `return self.v < o.v`self = A(vars={'v': 1}), o = A(vars={'v': 2})
12└ `self.v = v`(2回)self = A(vars={'v': 1}), v = 1
13└ `return self.v < o.v`self = A(vars={'v': 2}), o = A(vars={'v': 1})
結果実際の出力True True

学習のポイント:dataclass(order=True) も、比較を自動で作る。

この問題を演習で解く →

問題一覧へ

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