問題タブ [del]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - クラスの Python del
Python にクラスがあるとします。
__del__
A
任意のインスタンスの削除/ガベージ コレクション時に呼び出されます。
クラスに対して同じことを行うことは可能ですか?クラス自体がガベージ コレクションされたときに、いくつかのメソッドを呼び出したいと思います。これは、スクリプトの終了時に行われると想定しています。
ご指摘ありがとうございます。
編集:私が予想したように、誰もが私をこのテクニックの使用から遠ざけようとしています (私はおそらく自分でそのようなコメントをするでしょう:))。
私は次のことをしたい: クリーンアップする必要がある静的メンバーを持つクラスがあります。
呼び出されたいのですA.conn.close()
が、プログラムが終了する直前、つまり のインスタンスA
がこれ以上作成されないことがわかっている場合です。でこれを実行できることはわかっていますがatexit
、これは非常に醜いようです。
python - 辞書から要素を削除する
Pythonで辞書から項目を削除する方法はありますか?
さらに、辞書からアイテムを削除してコピーを返すにはどうすればよいですか (つまり、オリジナルを変更しないでください)。
python - このPythonの__del__の動作がわかりません
次のコードがそのように動作する理由を誰かが説明できますか?
出力(d2のデストラクタは呼び出されないことに注意してください)はこれです(python 2.7)
追加されたメソッドを削除せずにデストラクタが呼び出されるようにコードを「修正」する方法はありますか?つまり、d2.func = Noneを配置するのに最適な場所は、デストラクタです。
ありがとう
[編集]最初のいくつかの回答に基づいて、私はを使用することのメリット(またはその欠如)について質問していないことを明確にしたいと思い__del__
ます。私は、直感的でない振る舞いであると私が考えるものを示す最短の関数を作成しようとしました。循環参照が作成されていると思いますが、理由はわかりません。可能であれば、循環参照を回避する方法を知りたいのですが…。
python - デルはPythonでいつ役に立ちますか?
Pythonがキーワードを必要とする理由を私は本当に考えることができませんdel
(そしてほとんどの言語は同様のキーワードを持っていないようです)。たとえば、変数を削除するのではなく、単に割り当てることができNone
ます。また、辞書から削除するときに、del
メソッドを追加することができます。
Pythonを使い続ける理由はありますdel
か、それともPythonのガベージコレクション前の時代の痕跡ですか?
python - __del__を使用してクリーンアップ時に状態をファイルに保存しますか?
私は次のようなクラスを持っています:
現在、これはサーバープログラム内にあるため、シグナルによる事前の通知なしにシャットダウンされる可能性があります。可能であれば、クラスがその情報を確実に保存するようにこれを定義するのは安全ですか?
そうでない場合は、代わりに解決策として何を提案しますか?
python - Python: 特定の条件を満たすすべてのリスト インデックスを削除する
それを理解するために、Pythonで座標ペアのリストを反復処理し、座標の1つが負であるすべてのケースを削除しようとしています。例えば:
配列内:
いずれかの座標が < 0 であるすべてのペアを削除して、次のようにします。
私の問題は、python リストにギャップができないことです。そのため、次のようにループすると:
要素が削除されるとすべてのインデックスがシフトし、反復が台無しになり、あらゆる種類の問題が発生します。悪い要素のインデックスを別のリストに保存してから、それらの要素をループして削除しようとしましたが、同じ問題があります.1つがなくなると、リスト全体がシフトし、インデックスが正確ではなくなります.
足りないものはありますか?
ありがとう。
python - 呼び出されていない__del__()をデバッグする方法
私は__del__()
、オブジェクトが間違った内部状態にあるときに削除された場合に備えて、警告ログを書き込むために使用します(それについての怒りはありません)。
del my_object
テストしてみましたが、テストで使っています__del__()
が、呼ばれていないようです。
__del__()
のリファレンスは、これが発生する可能性のある3つの状況について警告していますが、それらをデバッグする方法についての手がかりは提供していません。
だから...どうやってそれをデバッグするのですか?
python - リストで「del」を呼び出す
これは印刷され2, 1, 0
ます。
さて、削除された要素の順序は仕様のどこかで定義されていますか、それとも実装固有ですか? (または、基本的なメカニズムを理解していない可能性があります)
たとえば、出力は次のようになり
0, 1, 2
ますか? 要素の削除中に要素のメモリの再割り当てを回避するために、おそらく注文が行われることを認識して2, 1, 0
いますが、それでも問題は残ります。del l
最後に、ステートメントとステートメントの違いは何del l[:]
ですか?
django - 標準のDjangoモデルからフィールドを削除します
注:これは、 AbstractUserが存在する前に尋ねられました。これは、おそらく最近使用したいものです。
基本的に、デフォルトのDjangoUserクラスからデフォルトのメールフィールドを削除したいと思います...
これらはすべてAttributeErrorを与えます。正常に機能しますが、次の方法でメソッドまたは属性を削除します。
だから私はなぜこれがうまくいかないのか興味があります。これらのモデルフィールドはどのようなものですか?
私が試したもう1つのことは、MyUserでemail = Noneを作成して電子メールを上書きすることでしたが、それも機能しませんでした(そして少し醜いでしょう)。
前もって感謝します!
追伸:なぜだろうと思っているなら; アプリケーションに本当に必要なのは不思議なことですが、データベースに未使用の列がないのは良いことだと思います。PpsDjangoファイルを変更してユーザーから「email」を手動で削除したくありません。
編集:ここでのフォローアップの質問(同じことをしたい人のために)syncdbの前に、標準のDjangoモデルからフィールドを削除してください
django - syncdb の前に、標準の Django モデルからフィールドを削除
これは、標準 Django モデルからのフィールドの削除に関するフォローアップの質問です。つまり、すでに作成されているモデルからフィールドを動的に削除できます。この場合は User.email フィールドです。したがって、ユーザーのコードを変更せずに、フィールドの電子メールがユーザーから削除されます。例として、以下のコードを参照してください。
モデル (1) からフィールドを動的に削除できますが、それはサーバーの起動時に発生し、存在する場合は元に戻されます。syncdb はサーバーの実行を必要とせず、通常は削除コードを (どういうわけか) 無視しているように見えるため、このアプローチはフィールドがデータベースに表示されるのを防ぎません(2)。
モデルからフィールドを削除する方法はありますか(Djangoモデルであるため、ファイルを変更せずに)、データベースにも表示されないようにする方法はありますか?
前もって感謝します!
マーク
EDIT : 私の問題は、モデル ファイルからテキスト " " を削除していて、データベースからフィールドを削除したいということではありません。m = models.IntegerField()
問題は、以下のコードを使用して、別のファイルで既に宣言されているモデルからフィールドを削除していることです。syncdb を実行するたびに South でマイグレーションを作成することは解決策ではないと思います(3)。
追加情報:
- 1)現在、コードはmodels.pyにありますが、Djangoの起動コードをどこに置くのでしょうか? 動作します。
- 2)カスタムクエリを使用してpost_syncdbシグナルで削除できますが、もっとエレガントなものを望んでいます...または、より正確に、まったくエレガントです。
- 3) 明らかに syncdb がまだ 'removed' フィールドを認識しているので、それがまったく機能する場合)、それがまだ何らかの形でそこにあるので、South はそうするだろうと思います。
これはコードです (models.py):
編集:(印刷で)チェックしたところ、syncdbで削除コードが実行されました。テーブルが作成される前に実行されます