[解決済み] Pythonのカスタムクラスで'with object() as f'を使用するための実装
質問
Pythonでファイルのようなオブジェクトを開き(/dev/を介したシリアル接続です)、それを閉じなければなりません。これは私のクラスのいくつかのメソッドで数回行われます。私は、コンストラクタでファイルを開き、デストラクタでそれを閉じるという方法をとっていました。しかし、私は奇妙なエラーを受け取っていて、それはガベージコレクタとそのようなものに関係していると思います。
これをやっていた理由は、私は
tcsetattr
を使う必要があり、それをあちこちで行うのは面倒だからです。そこで、それをすべて処理するインナークラスを実装して、次のように使うことができるようにしたいのです。
with Meter('/dev/ttyS2') as m:
ネットで調べていたのですが、本当に良い答えが見つかりませんでした。
with
構文がどのように実装されているかについての良い答えは見つかりませんでした。私が見たのは、それが
__enter__(self)
と
__exit(self)__
というメソッドがあります。しかし、これらのメソッドを実装するだけで、with構文を使用できるようになるのでしょうか?それとも、それ以上のことがあるのでしょうか?
これを行う方法についての例か、私が見ることができるファイルオブジェクトにすでに実装されている方法についてのドキュメントはありますか?
どのように解決するのですか?
これらのメソッドは、オブジェクトを
with
ステートメントで動作させるために必要なものです。
で
__enter__
では、ファイルオブジェクトを開いて設定した後、ファイルオブジェクトを返さなければなりません。
で
__exit__
では、ファイルオブジェクトを閉じなければなりません。それに書き込むためのコードは
with
ステートメント本体にあります。
class Meter():
def __init__(self, dev):
self.dev = dev
def __enter__(self):
#ttysetattr etc goes here before opening and returning the file object
self.fd = open(self.dev, MODE)
return self
def __exit__(self, type, value, traceback):
#Exception handling here
close(self.fd)
meter = Meter('dev/tty0')
with meter as m:
#here you work with the file object.
m.fd.read()
関連
-
[解決済み] pipでPythonの全パッケージをアップグレードする方法
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] Pythonでオブジェクトが属性を持つかどうかを知る方法
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] 最近のPythonでカスタム例外を宣言する適切な方法?
-
[解決済み] virtualenvで異なるバージョンのPythonを使用する
-
[解決済み] Pythonでシングルトンを作成する
-
[解決済み] Javaでファイルが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み】Pythonでディレクトリ内の拡張子.txtのファイルをすべて検索する
-
[解決済み] Pythonでファイルの読み込みと上書きをする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pythonのマルチプロセッシングプールimap_unorderedの呼び出しの進捗を表示しますか?
-
[解決済み] PythonでファイルのMD5チェックサムを計算するには?重複
-
[解決済み] django.db.migrations.exceptions.InconsistentMigrationHistory
-
[解決済み] 文字列のリストを内容に基づいてフィルタリングする
-
[解決済み] SQLAlchemy - テーブルのリストを取得する
-
[解決済み] 範囲指定された浮動小数点数のランダムな配列を生成します。
-
[解決済み] サブフォルダからのインポートモジュール
-
[解決済み] subprocess.run()の出力を抑制またはキャプチャするには?
-
[解決済み] Flaskで非同期タスクを作る
-
[解決済み] pipの依存性/必要条件をリストアップする方法はありますか?