用于__str__和方法解析顺序的Python Mixin
发布时间:2021-03-30 12:46:53 所属栏目:Python 来源:互联网
导读:我发现我用 Python编写的许多类包含一小部分变量,我实际上希望在调用str()时看到这些变量,并且为每个变量重写__str __(self)是相当麻烦的.因此,我煮了下面的mixin, class StrMixin(object): Automatically generate __str__ and __repr__ def __str__(self):
我发现我用 Python编写的许多类包含一小部分变量,我实际上希望在调用str()时看到这些变量,并且为每个变量重写__str __(self)是相当麻烦的.因此,我煮了下面的mixin, 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 当然,包括这里的对象是多余的,但这里到底发生了什么? 解决方法当你定义:class StrMixin(object): ... 编译器知道StrMixin位于类的MRO中的对象之前. 当你这样做时: class C(object,StrMixin): pass 您告诉编译器该对象在MRO中的StrMixin之前出现.但是对象也必须在StrMixin之后,所以它必须在MRO中出现两次,这是不允许的. 如果你说: class C(StrMixin,object): pass 那么MRO就是C,StrMixin,它满足两个类所强加的排序.没有重复,因为尽管对象被引用两次,但定义之间没有冲突. (编辑:台州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Django ForeignKey,null = True,内连接和左外连接
- 沉默记录器和打印到屏幕 – Python
- python – 是否有一个有意义的方法来使用发生器内的上下文管
- python – 如何动态调用类中的方法使用方法名分配给变量
- 如何执行python命令行自动完成,但不仅仅是在字符串的开头
- python – sqlalchemy将mixin列移动到最后
- python – WTForms SelectField没有正确地强制执行布尔值
- Python加pyGame实现的简单拼图游戏实例
- 在python列表解析中解包元组(未使用* -operator)
- python – 为Django应用程序中的用户添加动作的日志条目