【发布时间】:2016-08-09 23:46:47
【问题描述】:
我正在开发一个 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)
【问题讨论】:
标签: python design-patterns mixins