私は次のようなクラスを持ってい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
属性は。クラス属性の使用に完全に傾倒しているわけではありません。インポートステートメントをより適切に保存することを提案できる場合は、それを使用しますが、明らかにそのインポートをどこかに置く必要があります。どこに置けばいいですか?ありがとう