pracuję z somethign podobne do tego kodu:python: spółdzielczy supercall z __getattr__
class BaseClass(object):
def __getattr__(self, attr):
return lambda:'1'
class SubClass(BaseClass):
def foo(self):
suffix = '2'
return super(SubClass, self).foo() + suffix
class SubClass2(SubClass):
def foo(self):
suffix = '3'
return super(SubClass2, self).foo() + suffix
o = SubClass2()
print o.foo()
będę oczekiwać, aby zobaczyć wyjście „123”, ale zamiast tego pojawia się błąd AttributeError: 'super' object has no attribute 'foo'
. Python nawet nie próbuje korzystać z klasy podstawowej __getattr__
.
Bez modyfikacji klasy bazowej i zachowania dwóch super-wywołań podobnych, nie jestem w stanie uzyskać pożądanego wyniku. Czy istnieje jakiś wspólny wzorzec superklazji, który będzie dla mnie działał?
Rozumiem, że super() zastępuje getattr w jakiś sposób, aby robić to, co trzeba zrobić, ale pytam, czy istnieje jakikolwiek rozsądny obejście, które pozwala podklasą na __getattr__
być wywołana, gdy stosowne.
możliwe duplikat [ 'Super' obiekt nie dzwoni \ _ \ _ getattr \ _ \ _] (http ://przepełnienie stosu.com/questions/12047847/super-object-not-calling-getattr) – Eevee
@eevee Proponowany duplikat zadaje pytanie "dlaczego super nie działa?" mając na uwadze, że proszę o procedurę, która działa, ponieważ super nie zadziała. – bukzor