Проблема с ромбами при использовании MixIns в Python

Пожалуйста, рассмотрите следующий код, реализующий простой MixIn :

class Story(object):
    def __init__(self, name, content):  
     self.name = name
     self.content = content    

class StoryHTMLMixin(object):
    def render(self):
     return ("<html><title>%s</title>"
         "<body>%s</body></html>"
         % (self.name, self.content))

def MixIn(TargetClass, MixInClass):
    if MixInClass not in TargetClass.__bases__:
     TargetClass.__bases__ += (MixInClass,)

if __name__ == "__main__":
    my_story = Story("My Life", "<p>Is good.</p>")
    # plug-in the MixIn here
    MixIn(Story, StoryHTMLMixin)
    # now I can render the story as HTML
    print my_story.render()

Запуск main приводит к следующей ошибке:

TypeError: Cannot create a consistent method resolution
order (MRO) for bases object, StoryHTMLMixin

Проблема в том, что и Story , и StoryHTMLMixin получены из объект , привязка методов во время выполнения) без использования MixIns. Однако вопрос по-прежнему остается - это единственный вариант использования, когда возня с MRO неразрешима без повторной реализации или возврата к классам старого стиля?

6
задан Escualo 23 December 2010 в 01:05
поделиться