動いたのでメモ。12345と出力される。
class a():
def deco1(func):
def in_deco1(self):
print(1)
func(self)
print(5)
return in_deco1
class b(a):
def deco2(func):
@a.deco1
def in_deco2(self):
print(2)
func(self)
print(4)
return in_deco2
@deco2
def fun(self):
print(3)
b().fun()
追記
こっちでも動いた。
class a():
def deco1(func):
def in_deco1(self):
print(1)
func(self)
print(5)
return in_deco1
class b(a):
def deco2(func):
def in_deco2(self):
print(2)
func(self)
print(4)
return in_deco2
@a.deco1
@deco2
def fun(self):
print(3)
b().fun()
deco2に直に@a.deco1とつけるのならハナから1つのデコレータにすればいいとちょっと思ったが、
よくよく考えてみると分割させたい処理次第ではそうとも言い切れない。
まぁシステム次第だが出来る限りアトミックにすることを意識したい。
さらに追記
2重じゃないけどデコレータが普通の関数と同じように値を返戻できたので一応メモ。
これで121と出力される。
class a(object):
def b(func):
def in_b(self):
print(1)
if func(self):
print(2)
return in_b
@b
def c(self):
return True
@b
def d(self):
return False
e = a()
e.c()
e.d()