У меня есть один объект, завернутый в другой.
"Wrapper" обращается к атрибутам из "Обернутого" объекта, переопределяя __getattr__
.
Это хорошо работает, пока мне не нужно переопределить атрибут на подклассе, а затем получить доступ к атрибуту из базового класса с помощью super()
.
Я все еще могу получить доступ к атрибуту непосредственно из __getattr__
, но почему super()
не работает?
class Wrapped(object):
def __init__(self, value):
self.value = value
def hello_world(self):
print 'hello world', self.value
class Wrapper(object):
def __init__(self, obj):
self.wrapped_obj = obj
def __getattr__(self, name):
if name in self.__dict__:
return getattr(self, name)
else:
return getattr(self.wrapped_obj, name)
class Subclass(Wrapper):
def __init__(self, obj):
super(Subclass, self).__init__(obj)
def hello_world(self):
# this works
func = super(Subclass, self).__getattr__('hello_world')()
# this doesn't
super(Subclass, self).hello_world()
a = Wrapped(2)
b = Subclass(a)
b.hello_world()