Python 模擬試験

Python実践 模擬試験 第5回 問13・4章 Pythonのクラス(データクラス)

default_factory

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

from dataclasses import dataclass, field
@dataclass
class D:
    xs: list = field(default_factory=list)
a, b = D(), D()
a.xs.append(1)
print(b.xs, a == b)
  1. A

    [1] True

  2. B

    [] True

  3. C

    [1] False

  4. D

    [] False

正解と解説を見る

正解:D

データクラスで、リストなどのミュータブルなデフォルトを xs: list = [] と書くと、エラーになる。field(default_factory=list) で、インスタンスごとに作る。

順実行する行実行後の変数
1`from dataclasses import dataclass, field`—
2`@dataclass`—
3`class D:`—
4└ `xs: list = field(default_factory=list)`—
5└ `@dataclass`—
6`@dataclass`—
7└ `xs: list = field(default_factory=list)`—
8└ `@dataclass`—
9`class D:`—
10`a, b = D(), D()`a = D(vars={'xs': []}), b = D(vars={'xs': []})
11`a.xs.append(1)`a = D(vars={'xs': [1]})
12`print(b.xs, a == b)`b = D(vars={'xs': []}), a = D(vars={'xs': [1]})
結果実際の出力[] False

学習のポイント:__eq__ は、フィールドの値を比べる。

この問題を演習で解く →

問題一覧へ

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