__len__ と真偽値
次のコードを実行したときの出力として、正しいものを1つ選べ。
class E:
def __len__(self):
return 0
print(bool(E()), bool([1]))
- A
True True - B
False False - C
False True - D
TypeErrorが発生する。
正解と解説を見る
正解:C
オブジェクトの真偽値は、__bool__、なければ __len__ で決まる。どちらもなければ常に真。
| 順 | 実行する行 | 実行後の変数 |
|---|---|---|
| 1 | `class E:` | — |
| 2 | └ `def __len__(self):` | — |
| 3 | `print(bool(E()), bool([1]))` | — |
| 4 | └ `return 0` | — |
| 結果 | 実際の出力 | False True |
- A
誤り。
__len__が 0 を返すので偽。 - B
誤り。要素のあるリストは真。
- C
正しい。
__bool__がなければ__len__が使われ、0 は偽として扱われる。 - D
誤り。
__len__が使われる。
このサイトの問題は、各試験の公式に示された出題範囲に沿って作ったオリジナルの模擬問題です。本試験の問題ではありません。一般社団法人Pythonエンジニア育成推進協会の公式サービスではありません。