我有一堂课是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
从两个单独的文件中调用 -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
很简单,除了导入语句之外,这两个文件都包含完全相同的代码。看进口。
我希望减少重复代码的数量。有没有办法,我可以让基类动态导入它自己的基类。crawl.py
和中的代码list.py
不同,但它们的基类中的代码完全相同。当list.py
导入它的基类 ieScrapyCommand
时,该类应该从我在参数OtherCommand
中动态指定的文件导入它的基类 ie。name
我怎样才能做到这一点?我还没有找到一种更简单的方法来做到这一点,我只是在这个兔子洞里走下去,因为我有很多Commands
,我可以大大减少重复代码的数量。感谢您阅读本文。
--
至于 wname
属性。我并不完全倾向于使用类属性。如果您可以建议更好地存储导入语句,我会使用它,但我显然需要在某个地方进行导入。我应该把它放在哪里?谢谢