私は次のようなクラスを持っていcrawl.pyます:
from myapp.crawl import ScrapyCommand
class Command(ScrapyCommand):
name = 'someotherapp.crawl' #this should be the dynamic import
def handle(self, *args, **options):
super(Command, self).handle(self, *args, **options)
...
...< custom code >
...
と呼ばれるファイルにはlist.py次が含まれます。
from myapp.list import ScrapyCommand
class Command(ScrapyCommand):
name = 'someotherapp.list' #this should be the dynamic import
def handle(self, *args, **options):
super(Command, self).handle(self, *args, **options)
...
...< some other custom code >
...
両方が継承するこのクラスはScrapyCommand、2 つの別個のファイルから呼び出されます -myapp/crawl.py とmyapp/list.py. ScrapyCommandによって継承されるは次のcrawl.pyようになります。
from someotherapp.crawl import OtherCommand
class ScrapyCommand(OtherCommand):
def __init__(self, *args, **kwargs):
...
...
def handle(self, *args, **options):
return
ScrapyCommandによって継承されるは次のlist.pyようになります。
from someotherapp.list import OtherCommand
class ScrapyCommand(OtherCommand):
def __init__(self, *args, **kwargs):
...
...
def handle(self, *args, **options):
return
簡潔にするために、このコードを編集しました。のロジックScrapyCommandは単純で、インポート ステートメントを除いて、これら 2 つのファイルにはまったく同じコードが含まれています。インポートを見てください。
コードの重複の量を減らしたいと考えています。方法はありますか、基本クラスにそれ自身の基本クラスを動的にインポートさせることができます。crawl.pyとのコードlist.pyは異なりますが、基本クラスのコードはまったく同じです。インポートするとき、list.pyそれは基本クラス、つまりScrapyCommand、そのクラスはOtherCommand、パラメーターで動的に指定したファイルから基本クラス、つまりインポートする必要がありnameます。
これどうやってするの?これを行う簡単な方法を見つけることができませんでした。かなりの数Commandsのコードがあり、重複するコードの量を大幅に減らすことができたので、このうさぎの穴を下っているだけです。これを読んでくれてありがとう。
--
wname属性は。クラス属性の使用に完全に傾倒しているわけではありません。インポートステートメントをより適切に保存することを提案できる場合は、それを使用しますが、明らかにそのインポートをどこかに置く必要があります。どこに置けばいいですか?ありがとう