我正在开发一个Python项目,需要使用大约20个不同的类来实现各种功能,比如:"下载"、"解析"、"更新"等。
一些功能可以通过使用超类来轻松地进行因式分解,因为它们所需的代码对于所有功能而言都是相同的。
但有时候,尤其是对于"解析"方法,我有10个类必须实现相同的算法,另外还有10个类需要特定的算法。
根据我对Python的了解,这种行为可以很容易地使用mixins进行因式分解。
但问题在于,即使"解析"算法相同,我仍然需要为已解析的条目应用标记,而这个标记对于每个类都是不同的。我想知道是否有适当的方法使用类属性,该属性仅由mixin使用以实现此目的。
以下代码块提供了如何使用属性的示例:
class MyMixin():
def parse(self):
print(self.tag)
...
class MyClass(MyMixin):
tag = 'mytag'
我已经在一些框架中看到过类似的东西 (http://www.django-rest-framework.org/api-guide/generic-views/),但我有兴趣知道社区的意见。
==========================
编辑
具体来说,我是否应该编写以下内容:
class MyMixin():
def do_something(self):
print(self.tag)
class MyClass(MyMixin):
tag = 'mytag'
if __name__ == '__main__':
c = MyClass()
c.do_something()
或者那:
class MyMixin():
def do_something(self, tag):
print(tag)
class MyClass(MyMixin):
tag = 'mytag'
if __name__ == '__main__':
c = MyClass()
c.do_something(c.tag)
class Mixer(MixinBPlusOne, MixinBMinusOne, Base):
。在这种情况下,混入类的顺序不重要,但基类必须在列表中排在最后。 - Vladimir Prudnikovclass Mixer(<Mixins>, Base)
。 - Niko Pasanen