Python Mixin для __str__and Порядок разрешения методов

Я обнаружил, что многие классы, которые я пишу на Python, содержат небольшой набор переменных, которые я на самом деле хотел бы видеть при вызове str(), и что переписывание __str__ (self)для каждого довольно громоздко. Таким образом, я состряпал следующий миксин:

class StrMixin(object):
  '''
  Automatically generate __str__ and __repr__
  '''
  def __str__(self):
    import types
    name = self.__class__.__name__ + ': '
    attrs = [ '{}={}'.format(k,v) for (k,v) in self.__dict__.items() ]
    return name + ', '.join(attrs)

  def __repr__(self):
    return str(self)

Однако, если я пишу класс,

class C(object, StrMixin):
    pass

я получаю следующую ошибку при создании экземпляра,

TypeError: Error when calling the metaclass bases
    Cannot create a consistent method resolution
order (MRO) for bases object, StrMixin

Допустимо, включение объектаздесь избыточно, но что здесь действительно что-то происходит?

6
задан duckworthd 9 March 2012 в 09:30
поделиться