質問するログイン新規登録

質問編集履歴

1

詳細を追記しました。

2023/06/11 17:01

投稿

exnjinia
exnjinia

スコア16

title CHANGED
File without changes
body CHANGED
@@ -17,6 +17,31 @@
17
17
  return i
18
18
 
19
19
  x = My_getitem()
20
+ for i in x:
21
+ print(f'forの中です{i=}')
22
+ ```
23
+ 結果は以下のとおりです。
24
+ ```実行結果
25
+ __getitem__が呼ばれました
26
+ forの中ですi=0
27
+ __getitem__が呼ばれました
28
+ forの中ですi=1
29
+ __getitem__が呼ばれました
30
+ forの中ですi=2
31
+ __getitem__が呼ばれました
32
+ ```
33
+ ここまでは解説通りであることが理解できました。
34
+
35
+ そこで、forループ内で呼び出されているというiter関数の挙動を確認したく、以下のコードを実行しました。
36
+ ```Python
37
+ class My_getitem:
38
+ def __getitem__(self, i):
39
+ print("__getitem__が呼ばれました")
40
+ if 2 < i:
41
+ raise IndexError
42
+ return i
43
+
44
+ x = My_getitem()
20
45
  y = iter(x)
21
46
  print(dir(x))
22
47
  print(dir(y)) #yから__getitem__が消えている。
@@ -36,7 +61,6 @@
36
61
  forの中ですi=2
37
62
  __getitem__が呼ばれました
38
63
  ```
39
-
40
- なぜオブジェクトyには__getitem__メソッドが存在しないのに、forループ内で呼び出すことができるのか。
64
+ ここでお聞きしたいのですが、なぜオブジェクトyには__getitem__メソッドが存在しないのに、forループ内で呼び出すことができるのでしょうか。
41
65
  forループの内部で何が起こっているのか教えていただけないでしょうか。
42
66
  よろしくお願いいたします。