質問編集履歴
1
詳細を追記しました。
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
|
よろしくお願いいたします。
|