Uważam, że wiele klas, które piszę w Pythonie, zawiera mały zestaw zmiennych, które naprawdę chciałbym zobaczyć, gdy zadzwonię pod numer str()
, i że przepisanie __str__(self)
dla każdego jest raczej uciążliwe. Zatem ja gotowane następujące wstawek,Python Mixin dla __str__and Metoda Resolution Order
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)
Jeśli jednak napisać klasę,
class C(object, StrMixin):
pass
otrzymuję następujący błąd na konkretyzacji,
TypeError: Error when calling the metaclass bases
Cannot create a consistent method resolution
order (MRO) for bases object, StrMixin
To prawda, w tym object
tutaj jest zbędny, ale co tu się naprawdę dzieje?
Jeśli chcesz po prostu obejść ten problem, należy rozważyć dokonanie dekorator zamiast mixin. –