Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 15, 2010 16:30:03

meticulos.slacker
От:
Зарегистрирован: 2010-04-15
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

change mro

Существует несколько классов(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()
дальше не знаю как имея требуемый класс получить метод этого класса применительно к объекту



Офлайн

#2 Апрель 15, 2010 17:15:20

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

change mro

А гляньте-ка http://divmod.org/trac/wiki/DivmodEpsilon, modal.py



Офлайн

#3 Апрель 15, 2010 19:38:57

meticulos.slacker
От:
Зарегистрирован: 2010-04-15
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

change mro

спасибо, очень помогло, пока разбирался нашел решение для своего метода, но сейчас подумываю использовать Modal



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version