Форум сайта python.su
0
всем здравствуйте, вот решаю задачку на наследование классов
суть- мне сначала заводят данные, какой класс от какого наследуется, например
A
B : C D
C : A
и тд
а потом мне задаются вопросы, являются классы предками или нет, а я должна выводить йес ноу, например
B : C
йес
у меня есть алгоритм в голове, но до конца не доходит как его реализовать, вот тут прошу помощи
сначала я строки привожу в вид без двоеточия путем d=re.findall(+,c) получается всё красиво в виде
далее моя идея написать функцию так, чтобы выводились команды class B(C,D):pass
как-то так мне придумалось
def fun(a,*args):
for arg in args:
class a(arg):pass
fun(d)
но оно не работает
когда я спрашиваю его issubclass(B, C) говорит что этих классов нет
Офлайн
857
IrisЧто значит “заводят данные”? Просто в виде текста?
суть- мне сначала заводят данные
IrisНе, если там просто текст, то надо построить иерархию (дерево) и выполнять поиск по нему.
как-то так мне придумалось
Отредактировано py.user.next (Апрель 26, 2016 02:37:45)
Офлайн
88
IrisТак работает:
но оно не работает
>>> types = {}
>>> types['A'] = type('A', (), {})
>>> types['B'] = type('B', (), {})
>>> types['C'] = type('C', (types['A'],), {})
>>> types['D'] = type('D', (types['A'], types['B']), {})
>>> issubclass(types['A'], types['B'])
False
>>> issubclass(types['C'], types['A'])
True
>>> issubclass(types['D'], types['A'])
True
>>> issubclass(types['D'], types['B'])
True
>>> Офлайн