[過去ログ] 【まず1嫁】くだすれPython(超初心者用) その53 (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
605(1): デフォルトの名無しさん [] 2021/05/12(水) 00:31:29.50 ID:p52W3PYV(1/5) AAS
デストラクタの挙動がよくわかりません。
以下のコードを実行すると
#!/usr/bin/env python3
class Gnuplot:
import PyGnuplot as pgp
def __del__(self):
del self.pgp
if __name__ == "__main__":
gp = Gnuplot()
del gp
------------------
デストラクタの箇所で
del self.pgp
AttributeError: pgp
と属性エラーが出るのですがなにが悪いのかわかりません。
606(1): デフォルトの名無しさん [] 2021/05/12(水) 00:45:07.28 ID:p52W3PYV(2/5) AAS
もしかして、クラス変数だからdelできない?
613: デフォルトの名無しさん [] 2021/05/12(水) 21:55:38.61 ID:p52W3PYV(3/5) AAS
>>610 611
削除できました。ただ、クラス変数をデストラクタで削除してしまうと
次回インスタンス宣言するときに必要なクラス変数が存在しないことに
なってしまってひどいバグの温床になることがわかりました。
確かに明示的に削除する必要はないですね。
>>612
モジュールインポートでグローバルな名前空間が汚れるのが嫌なので
クラスのスコープにいれて初期化子とデストラクタでモジュールのロードと
破壊を自動化しようとしているんです。
別に文頭でモジュールのインポートの宣言をしなければいけないという
わけではないのでは。
615: デフォルトの名無しさん [] 2021/05/12(水) 22:18:22.84 ID:p52W3PYV(4/5) AAS
モジュールをクラス変数ではなくインスタンス変数として束縛したいのですが
できません。
--------
#!/usr/bin/env python3
class Gnuplot:
def __init__(self):
import PyGnuplot as pgp
pass
def cmd(self,commands):
self.pgp.c(commands)
pass
if __name__ == "__main__":
agp = Gnuplot()
agp.cmd("plot sin(x)")
を実行すると、
AttributeError: 'Gnuplot' object has no attribute 'pgp'
と出ます。
__init__の中でPyGnuplot をインポートしてインスタンス変数self.pgp
に束縛したつもりなんですが、どうもそれがうまくいかないみたいなんです。
モジュール変数はクラス変数にしか束縛できないんでしょうか。。
617: デフォルトの名無しさん [] 2021/05/12(水) 22:47:49.00 ID:p52W3PYV(5/5) AAS
>>616
なーるほど。盲点でした。
おかげさまでうまくいきました。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.041s