Я обнаружил, что многие классы, которые я пишу на 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
Допустимо, включение объекта
здесь избыточно, но что здесь действительно что-то происходит?