前提・実現したいこと
クラスの初期処理に失敗したときにクラス自身を削除する、といったことがしたいです
仮コードで挙動を確認している最中に、想定と異なる挙動をしたので質問しました
実行していたのはpaiza.ioというサイトです
該当のソースコード
python
1class A(): 2 def __init__(self): 3 del self 4 def __del__(self): 5 print("deleted") 6 def __str__(self): 7 return "exist"
テストコードと出力
サイトの仕様で最後にインスタンスが削除されるのか、__init__
からdel
を取り除いてもdeleted
と出力されます
a = A() print(a) =============== exist deleted
a = A() del a =============== deleted
a = A() print(a) print(a) =============== exist exist deleted
こういうことですかね?```
def __init__(self):
cls = self.__class__
del cls
```
試してみましたが、ダメでした
ならtry: a=A(); except: del Aで良いのでは?特殊すぎて目的がよくわかりません。
> クラスの初期処理に失敗したときにクラス自身を削除する
は目的ではないはずです。
「実現したいこと」は他にあって、そのための手段の方かと思います。
そもそもの目的である「実現したいこと」の方を質問した方がよいですよ。
お二人ともありがとうございます
リスト内法表記でインスタンスを生成する際、__init__で正常に生成できなかったインスタンスを削除したいのが目的でした
__init__ほか、生成前後のプログラムを見直してみます
ありがとうございました
> __init__で正常に生成できなかったインスタンスを削除したい
なぜ? そんな突拍子もない(ように見える)ことをしたくなったんですか???????
↑のコメントは無視してください。申し訳ありません。
インスタンス生成時に、失敗しうる通信を行っているクラスがあり、失敗した場合にインスタンスを生成しないことはできないのだろうか
→生成した直後に__init__で消せばよいのでは?(try-catch文の追加なので良くないことはわかってはいたのですがつい……)
という考えです
通信の機構を別のメソッドに切り分けて対応しようと思っています
クラスを削除ではなくて、__init__に失敗したインスタンスを削除だったのですね。
回答1件
あなたの回答
tips
プレビュー