Требуется получить доступ к методам/свойствам классов (A, B, …) в зависимости от state этого объекта. В state хранится имя класса. Если у класса родителя указанного в state нет данного метода/параметра вернуть метод/параметр класса Account.
Например при следующих классах:
class A(object):
x = 'A param'
def foo(self):
print 'A foo'
def bar(self):
print 'A bar'
class B(object):
x = 'B param'
def foo(self):
print 'B foo'
class Account(A, B):
x = 'C param'
state = 'B'
def foo(self):
print 'Account foo'
def bar(self):
print 'Account bar'
obj = Account()
obj.foo()
obj.bar()
B foo
Account bar
def __getattribute__(self, name):
# get self class
self_cls = object.__getattribute__(self, '__class__')
# get parents classes
parents = self_cls.mro()
# get need state class(e.g. A, B)
cls_name = object.__getattribute__(self, 'state')
# find need class in parents class
cls = (cls for cls in parents if cls.__name__.endswith(cls_name)).next()