Python 模擬試験

Python実践 模擬試験 第6回 問13・4章 Pythonのクラス(プロパティ)

setter での検証

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

class T:
    def __init__(self):
        self._v = 0
    @property
    def v(self):
        return self._v
    @v.setter
    def v(self, x):
        if x < 0:
            raise ValueError
        self._v = x
t = T()
t.v = 3
try:
    t.v = -1
except ValueError:
    print(t.v)
  1. A

    -1

  2. B

    0

  3. C

    何も出力されない。

  4. D

    3

正解と解説を見る

正解:D

@property と @v.setter で、属性のように読み書きできるメソッドに、検証を入れられる。内部の値は _v のように別名で持つ。

順実行する行実行後の変数
1`class T:`—
2└ `def __init__(self):`—
3└ `@property`—
4└ `def v(self):`—
5└ `@property`—
6└ `def v(self):`—
7└ `@v.setter`—
8└ `def v(self, x):`—
9└ `@v.setter`—
10└ `def v(self, x):`—
11`t = T()`t = T(vars={'_v': 0})
12└ `self._v = 0`self = T(vars={'_v': 0})
13`t.v = 3`t = T(vars={'_v': 3})
14└ `if x < 0:`x = 3
15└ `self._v = x`self = T(vars={'_v': 3}), x = 3
16`try:`—
17`t.v = -1`t = T(vars={'_v': 3})
18└ `if x < 0:`x = -1
19└ `raise ValueError`—
20`except ValueError:`—
21`print(t.v)`t = T(vars={'_v': 3})
22└ `return self._v`self = T(vars={'_v': 3})
分岐`except ValueError:`実行される
結果実際の出力3

学習のポイント:クラスの利用者は、属性のように使える。

この問題を演習で解く →

問題一覧へ

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