我有一個類中crawl.py
這是這樣的:動態導入一個基類在Python
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
。由crawl.py
繼承的ScrapyCommand
看起來是這樣的:
from someotherapp.crawl import OtherCommand
class ScrapyCommand(OtherCommand):
def __init__(self, *args, **kwargs):
...
...
def handle(self, *args, **options):
return
由list.py
繼承的ScrapyCommand
看起來是這樣的:
from someotherapp.list import OtherCommand
class ScrapyCommand(OtherCommand):
def __init__(self, *args, **kwargs):
...
...
def handle(self, *args, **options):
return
我已經編輯爲簡潔的代碼。 ScrapyCommand
中的邏輯很簡單,除了import語句外,這兩個文件都包含完全相同的代碼。看看進口。
我在尋找減少重複代碼的數量。有沒有辦法,我可以讓基類動態地導入它自己的基類。 crawl.py
和list.py
中的代碼不同,但其基類中的代碼完全相同。當list.py
導入它的基類即ScrapyCommand
時,該類應該從我在name
參數中動態指定的文件導入它的基類,即OtherCommand
。
我該怎麼做?我一直無法找到一個更簡單的方法來做到這一點,我只是走下這個兔子洞,因爲我有很多Commands
,我可以大大減少重複代碼的數量。感謝您閱讀本文。
-
至於thew name
屬性。我並不完全傾向於使用類屬性。如果你可以建議更好的商店進口聲明我會去,但我需要顯然有進口的地方。我應該把它放在哪裏?謝謝
我並不完全傾向於使用類屬性。如果你能提出一個更好的方法,我會去那,但我需要顯然有進口的地方。我應該把它放在哪裏?謝謝。 –