[解決済み] クラス内のPythonデコレータ
2022-03-07 03:35:44
質問
のような書き方は可能でしょうか?
class Test(object):
def _decorator(self, foo):
foo()
@self._decorator
def bar(self):
pass
これは失敗です:@selfのselfが不明です
も試してみました。
@Test._decorator(self)
も失敗します。テストは不明です
インスタンス変数を一時的に変更したい。 でデコレータを実行し、デコレートされたメソッドを実行してから を変更し、元に戻す。
どのように解決するのですか?
このようなもので良いのでしょうか?
class Test(object):
def _decorator(foo):
def magic( self ) :
print "start magic"
foo( self )
print "end magic"
return magic
@_decorator
def bar( self ) :
print "normal call"
test = Test()
test.bar()
これにより、デコレータにアクセスするための self の呼び出しを回避し、 通常のメソッドとしてクラスの名前空間に隠蔽された状態にすることができます。
>>> import stackoverflow
>>> test = stackoverflow.Test()
>>> test.bar()
start magic
normal call
end magic
>>>
は、コメント中の質問に答えるために編集されました。
hidden デコレーターを別のクラスで使用する方法
class Test(object):
def _decorator(foo):
def magic( self ) :
print "start magic"
foo( self )
print "end magic"
return magic
@_decorator
def bar( self ) :
print "normal call"
_decorator = staticmethod( _decorator )
class TestB( Test ):
@Test._decorator
def bar( self ):
print "override bar in"
super( TestB, self ).bar()
print "override bar out"
print "Normal:"
test = Test()
test.bar()
print
print "Inherited:"
b = TestB()
b.bar()
print
出力します。
Normal:
start magic
normal call
end magic
Inherited:
start magic
override bar in
start magic
normal call
end magic
override bar out
end magic
関連
-
Pythonコンテナのための組み込み汎用関数操作
-
[解決済み] 'DataFrame' オブジェクトに 'sort' 属性がない
-
[解決済み] 関数デコレータを作成し、それらを連鎖させるには?
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] Pythonのクラスはなぜオブジェクトを継承するのですか?
-
[解決済み】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を使ったオフィス自動化コード例
-
Python jiabaライブラリの使用方法について説明
-
Python interpreted model libraryによる機械学習モデル出力の可視化 Shap
-
PyQt5はユーザーログインGUIインターフェースとログイン後のジャンプを実装しています。
-
PythonによるExcelファイルの一括操作の説明
-
[解決済み】RuntimeWarning: 割り算で無効な値が発生しました。
-
[解決済み】pygame.error: ビデオシステムが初期化されていない
-
[解決済み】ImportError: bs4という名前のモジュールがない(BeautifulSoup)
-
[解決済み】Flaskのテンプレートが見つからない【重複あり
-
[解決済み】 'numpy.float64' オブジェクトは反復可能ではない