Найти - Пользователи
Полная версия: change mro
Начало » Python для экспертов » change mro
1
meticulos.slacker
Существует несколько классов(A, B,…), и класс Account наследуемый от всех этих классов. Создан экземпляр класса Account - obj.
Требуется получить доступ к методам/свойствам классов (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
Пытался реализовать это через __getattribute__:
    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()
дальше не знаю как имея требуемый класс получить метод этого класса применительно к объекту
Андрей Светлов
А гляньте-ка http://divmod.org/trac/wiki/DivmodEpsilon, modal.py
meticulos.slacker
спасибо, очень помогло, пока разбирался нашел решение для своего метода, но сейчас подумываю использовать Modal
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB