如何了解课程中的“ self.fields”?

时间:2019-10-24 07:26:05

标签: python

当我读到这个document

for k in self.fields

作为for循环的描述,它应该是一个列表。

这意味着对象实例的属性fields。 但是在Python基础对象中没有fields属性,并且您看到AsDictMixin是从object继承的。

2 个答案:

答案 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]

如您所见,可读性和代码清除性存在问题。