実現したいこと
親クラス内のデコレータメソッドを子クラスで使用したいのですが、想定していたようにできません。どのように書くのが適切でしょうか?
該当のソースコード
python
1class A: 2 def decorator(f): 3 def wrapper(self, *args, **kwargs): 4 print("wrapper") 5 f(self, *args, **kwargs) 6 return 7 return wrapper 8 9class B(A): 10 @decorator 11 def b(self): 12 print("b") 13 return 14 15b = B() 16b.b()
結果
Traceback (most recent call last): File "main.py", line 9, in <module> class B(A): File "main.py", line 10, in B @decorator NameError: name 'decorator' is not defined
試したこと
デコレータの指定方法を変更すれば動きました。しかしこれがベストではない気がしています。
「ベストではない」と言ったのは、簡潔に言えば親クラス名を複数回書いているためにリファクタリングの観点から問題があると考えたからです。
また、decoratorメソッドをオーバーライドする必要がある際、@~も明示的に変更する必要が生じてしまいます。
python
1class A: 2 def decorator(f): 3 def wrapper(self, *args, **kwargs): 4 print("wrapper") 5 f(self, *args, **kwargs) 6 return 7 return wrapper 8 9class B(A): 10 @A.decorator 11 def b(self): 12 print("b") 13 return 14 15b = B() 16b.b()
結果
wrapper b
補足情報(FW/ツールのバージョンなど)
Python: 3.8.5
回答1件
あなたの回答
tips
プレビュー