我的BaseScraper.py
有:
class BaseScraper:
def __init__(self, page=0, min_code_size=300):
self.page = page
self.MIN_CODE_SIZE = min_code_size
...
我的JSScraper.py
有:
from BaseScraper import BaseScraper
class JSScraper(BaseScraper):
def __init__(self):
super(self).__init__(*args)
我的jsscraper.py
(全部运行)具有:
from Scraper import JSScraper
scraper = JSScraper.JSScraper(page=0)
因此,当我运行jsscraper.py
时,我得到:
ModuleNotFoundError: No module named 'BaseScraper'
我不完全了解如何构造这些项目以正确导入和处理类。任何帮助将不胜感激。
答案 0 :(得分:2)
首先,您应该始终在rowid
上使用import X
。这是由于X的导入方式。
简而言之,如果您使用from X import *
,则会创建一个对X的引用,您可以访问该引用,通过该引用,您可以访问X的所有属性,例如import X
。
如果您使用X.property
,则导入对X的所有属性的引用。这意味着您只需键入from X import *
就可以从X访问属性。不利的一面是,如果您已经拥有一个同名的属性,它将被覆盖。
有关导入的更多信息,您可以阅读this article
回到您的问题;要解决导入问题,您应该像这样导入;
jsscraper.py :
property
Scraper.JSScraper.py : (请注意,您忘记在导致错误的导入中添加Scraper了)
import Scraper.JSScraper
# Access the scraper via JSScraper.JSScraper()
对于更具可读性的解决方案,您还可以使用别名进行导入
像import Scraper.BaseScraper
# Access the base scraper via BaseScraper.BaseScraper()
一样,您可以像import X.Y as z
对您来说,这意味着:
z.property
Scraper.JSScraper.py : (请注意,您忘记在导致错误的导入中添加Scraper了)
import Scraper.JSScraper as scraper
# Access the scraper via scraper.JSScraper()
答案 1 :(得分:1)
在您的jsscraper.py
文件中,您写了from BaseScraper import BaseScraper
。
(我不是Python专家)如果您这样写,我想它会起作用
对于“ JSScraper.py”:
from Scraper.BaseScraper import BaseScraper
因为Python认为“发件人”(from BaseScraper ...)
之后的“ BaseScraper”是目录,而不是类所在的文件名。
好吧,结果您也必须将“ jsscraper.py”更改为:
from Scraper.JSScraper import JSScraper
就像我已经说过的那样,我猜我的解释有点(或者真的)是错误的。但我希望能为您提供帮助。 (对不起,英语不好)