私は、「ダウンロード」、「解析」、「更新」などの機能のリストを実装する約20の異なるクラスを使用する必要があるPythonプロジェクトに取り組んでいます。mixinsは親属性を使うべきですか?
いくつかの機能は簡単にスーパークラスを使用することによって分解されます。なぜなら、必要なコードがすべて同じであるからです。
しかし、「解析」メソッドの場合、同じアルゴリズムを実装する必要のある10個のクラスと、特定のアルゴリズムを必要とする10個のクラスがあります。
私がPythonについて知っていることに基づいて、この振る舞いはmixinを使うことで簡単に因数分解できます。
"解析"アルゴリズムが同じでも、解析されたエントリにタグを適用する必要がありますが、このタグは各クラスに固有のものです。この目標を達成するためにmixinによってのみ使用されるクラス属性を使用する適切な方法であるかどうかは疑問です。
このコードのチャンクは属性が使用されている方法の例を与える:
class MyMixin():
def parse(self):
print(self.tag)
...
class MyClass(MyMixin):
tag = 'mytag'
私はすでにいくつかのフレームワーク(http://www.django-rest-framework.org/api-guide/generic-views/)でそれを見たが、私は、コミュニティの意見何を知って興味があります。具体的な例を要約すると
==========================
EDIT
、私がすべき
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)