回答編集履歴

2

実行内容追記

2020/06/12 22:52

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -55,3 +55,27 @@
55
55
  with end
56
56
 
57
57
  ```
58
+
59
+
60
+
61
+ 実行内容的には、以下を実行したことになります。
62
+
63
+ with文は、以下の内容を実行するためのシンタックスシュガー(糖衣構文)ということになります。
64
+
65
+
66
+
67
+ ```py
68
+
69
+ s = Sample()
70
+
71
+ exit_object = s.__enter__()
72
+
73
+ try:
74
+
75
+ s.hello()
76
+
77
+ finally:
78
+
79
+ exit_object.__exit__()
80
+
81
+ ```

1

サンプルコード追加

2020/06/12 22:52

投稿

shiracamus
shiracamus

スコア5406

test CHANGED
@@ -1,3 +1,57 @@
1
1
  `__enter__`メソッドと `__exit__`メソッドを持っているオブジェクトであれば with 文が使えます。
2
2
 
3
3
  参考: https://docs.python.org/ja/3/reference/compound_stmts.html#the-with-statement
4
+
5
+
6
+
7
+ サンプルプログラム
8
+
9
+
10
+
11
+ ```python
12
+
13
+ class Sample:
14
+
15
+
16
+
17
+ def __enter__(self):
18
+
19
+ print("with start")
20
+
21
+ return self
22
+
23
+
24
+
25
+ def __exit__(self, *args):
26
+
27
+ print("with end")
28
+
29
+
30
+
31
+ def hello(self):
32
+
33
+ print("Hello, world!")
34
+
35
+
36
+
37
+
38
+
39
+ with Sample() as s:
40
+
41
+ s.hello()
42
+
43
+ ```
44
+
45
+
46
+
47
+ 実行結果:
48
+
49
+ ```text
50
+
51
+ with start
52
+
53
+ Hello, world!
54
+
55
+ with end
56
+
57
+ ```