当我读到这个document:
for k in self.fields
作为for循环的描述,它应该是一个列表。
这意味着对象实例的属性fields
。
但是在Python基础对象中没有fields
属性,并且您看到AsDictMixin
是从object
继承的。
答案 0 :(得分:0)
Mixin通常设计为扩展类的某些功能,而不是直接实例化。很多时候,它们是为特定类型的类设计的,并且在知道该类型的实现细节的情况下编写。
因此,在这种情况下,大概它公开了一个as_dict
方法,用于将要应用混合的类的实例转换为dict
。
您需要检查将mixin用作超类的类,然后在其中找到self.fields
。
答案 1 :(得分:0)
Mixin是预期应由其他应具有某些属性的类继承的类。它类似于接口,但是提供了部分具体的实现,而不是纯粹的抽象。
In [1]: class MyMixin:
...: def get_evens(self):
...: return [x for x in self.elements if x % 2 == 0]
...:
In [2]: class MyClass(MyMixin):
...: def __init__(self, elements):
...: self.elements = elements
...:
In [3]: mc = MyClass([1, 2, 3, 4, 5])
In [4]: mc.get_evens()
Out[4]: [2, 4]
如您所见,可读性和代码清除性存在问题。