Pomóż facetowi. Nie można dostać dekoratora do pracy z dziedziczeniem. Zepsułem to do najprostszego małego przykładu w moim roboczym obszarze roboczym. Nadal wydaje się, że nie działa.Dekoratory Python i dziedziczenie
class bar(object):
def __init__(self):
self.val = 4
def setVal(self,x):
self.val = x
def decor(self, func):
def increment(self, x):
return func(self, x) + self.val
return increment
class foo(bar):
def __init__(self):
bar.__init__(self)
@decor
def add(self, x):
return x
Ups, nazwa "decor" nie jest zdefiniowana.
Okay, a może o @bar.decor
? TypeError: niezwiązana metoda "decor" musi zostać wywołana z instancją paska jako pierwszym argumentem (zamiast tego otrzymała instancję funkcji)
OK, a może o @self.decor
? Nazwa "self" nie jest zdefiniowana.
OK, a może około @foo.decor
?! Nazwa "foo" nie jest zdefiniowana.
AaaaAAaAaaaarrrrgggg ... Co robię źle?
W przykładzie, można mieć 'powrócić x + self.val' dla definicji' add' w 'foo'. Czy nie zrobiłbyś tego w swoim prawdziwym kodzie? –
To jest destylowany kod przykładowy, podświetlający problem, z którym miałem do czynienia. Jeśli kod byłby taki prosty, to tak. Jednak tak nie jest. – wheaties