回答編集履歴

1

追記1

2018/09/13 06:02

投稿

BeatStar
BeatStar

スコア4958

test CHANGED
@@ -77,3 +77,135 @@
77
77
 
78
78
 
79
79
  そうすれば多少はマシになると思います。
80
+
81
+
82
+
83
+ ---
84
+
85
+ [追記1]
86
+
87
+
88
+
89
+ もっとスマートに...ですか。
90
+
91
+ うーん、仕様なので最終的には open -> 何らかの処理 -> close っていうのは必ずだと思いますが、
92
+
93
+ 視覚的にわかりやすく...っていうのなら、関数化 ( メソッド化 ) するかクラス化するか。じゃないかなと。
94
+
95
+
96
+
97
+ 例えば、C++ではデストラクタっていう、コンストラクタの反対の特殊なメソッドがあるので、
98
+
99
+
100
+
101
+ コンストラクタで openしておいて、デストラクタでclose。execメソッドとかみたいな独自のメソッドで何らかの処理...みたいにするクラスを定義してそれを使うとか。
102
+
103
+
104
+
105
+ で、検索してみるとPythonにもデストラクタは存在するみたいですが、「いつ起動するかわからん」らしく、あまり使われない様子。
106
+
107
+
108
+
109
+ 根拠:[Python基礎講座(13 クラス)](https://qiita.com/Usek/items/a206b8e49c02f756d636)
110
+
111
+
112
+
113
+ ということなのでこれは論外。
114
+
115
+
116
+
117
+ で、もうちょっと考えてみると、デザインパターンのTemplateMethodパターンが使えそう。
118
+
119
+
120
+
121
+ 親クラスとして
122
+
123
+
124
+
125
+ openをしておくメソッド, closeをするメソッド, 実際の処理をするメソッド は 子クラスで定義するようにしておいて、execメソッドなるメソッドに流れを記述。そのクラスを継承してopenしておく...とかのメソッドを定義。
126
+
127
+ そうすれば execメソッドを呼び出せばいいだけ。
128
+
129
+
130
+
131
+ できれば純粋仮想とかがいいかもしれないけど、私はpythonはやっていないので詳しくない。なので普通のクラスとしてやると、
132
+
133
+
134
+
135
+ ```Python
136
+
137
+ # あくまでイメージとして。
138
+
139
+ class TestParent:
140
+
141
+ def open( filename ):
142
+
143
+ # ダミー
144
+
145
+ def close():
146
+
147
+ # ダミー
148
+
149
+ def Main():
150
+
151
+ # ダミー
152
+
153
+ def exec( filename ):
154
+
155
+ if open( filename ):
156
+
157
+ Main()
158
+
159
+ close()
160
+
161
+
162
+
163
+ class TestChild(TestParent):
164
+
165
+ def open( filename ):
166
+
167
+ # ここでファイルを開く
168
+
169
+ def close():
170
+
171
+ # ここでファイルを閉じる
172
+
173
+ def Main():
174
+
175
+ # ここで実際に行いたい処理 ( 例えばファイルのデータを読み取って計算して返すとか )
176
+
177
+
178
+
179
+ # 呼び出し元にて
180
+
181
+ file = TestChild()
182
+
183
+ file.exec( ファイルパス ) # execメソッドを呼び出すだけ。
184
+
185
+ ```
186
+
187
+ のような状態。
188
+
189
+
190
+
191
+ そうすれば質問で言えば
192
+
193
+
194
+
195
+ ```Python
196
+
197
+ file = TestChild();
198
+
199
+ for image in path:
200
+
201
+ file.exec( image )
202
+
203
+ ```
204
+
205
+
206
+
207
+ みたいな感じでできる。もちろん戻り値とかも必要だけど。
208
+
209
+
210
+
211
+ でも最終的にはcloseしたりするから対して変わらん ( 行数が長くなるが ) ので、スマートと言えるかどうかわかりませんが。