メソッドチェーン
次のコードを実行したときの出力として、正しいものを1つ選べ。
class A:
def __init__(self):
self.n = 0
def inc(self):
self.n += 1
return self
print(A().inc().inc().n)
- A
2 - B
1 - C
0 - D
AttributeErrorが発生する。
正解と解説を見る
正解:A
メソッドが self を返すと、obj.a().b().c() のようにつなげて書ける。pandas の操作でもよく使われる書き方。
| 順 | 実行する行 | 実行後の変数 |
|---|---|---|
| 1 | `class A:` | — |
| 2 | └ `def __init__(self):` | — |
| 3 | └ `def inc(self):` | — |
| 4 | `print(A().inc().inc().n)` | — |
| 5 | └ `self.n = 0` | self = A(vars={'n': 0}) |
| 6 | └ `self.n += 1` | self = A(vars={'n': 1}) |
| 7 | └ `return self` | self = A(vars={'n': 1}) |
| 8 | └ `self.n += 1` | self = A(vars={'n': 2}) |
| 9 | └ `return self` | self = A(vars={'n': 2}) |
| 結果 | 実際の出力 | 2 |
- A
正しい。メソッドが
selfを返すので、続けて呼び出せる。 - B
誤り。2 回呼ばれる。
- C
誤り。
incで増える。 - D
誤り。
incがselfを返しているので、続けて呼べる。
このサイトの問題は、各試験の公式に示された出題範囲に沿って作ったオリジナルの模擬問題です。本試験の問題ではありません。一般社団法人Pythonエンジニア育成推進協会の公式サービスではありません。