我的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'
我还不完全明白应该如何构造这些项目来正确导入和处理类。任何协助都将不胜感激。你知道吗
在
jsscraper.py
文件中,您编写了from BaseScraper import BaseScraper
。(我不是Python方面的专家)我想如果你这样写的话,它会工作的
“为”JS刮刀.py“:
因为Python认为“from”(
from BaseScraper ...)
)后面的“BaseScraper”是一个目录,而不是类所在的文件名。你知道吗因此,你必须改变你的JS刮刀.py“太投入了:
就像我已经说过的,我想我的解释有点(或真的)错误。但我希望我能帮助你。(抱歉英语不好)
如何导入
首先,你们应该经常使用
import X
而不是from X import *
。这是由于X是如何导入的。你知道吗简而言之,如果您使用
import X
,那么您可以访问一个对X的引用,通过这个引用您可以访问X的所有属性,比如X.property
。你知道吗但是,如果使用
from X import *
,则导入对X的所有属性的引用。这意味着您只需键入property
,就可以从X访问属性。这样做的缺点是,如果您已经有一个同名的属性,它将被覆盖。你知道吗有关导入的详细信息,请阅读this article
问题的解决办法
回到您的问题;要解决导入问题,您应该这样导入
JS刮刀.py:
Scraper.JSScraper.py文件: (请注意,您在导入时忘记预先添加Scraper,这导致了错误)
更具可读性的解决方案
为了获得更具可读性的解决方案,还可以为导入使用别名 比如
import X.Y as z
,你可以像z.property
一样访问它对您而言,这意味着:
Scraper.JSScraper.py文件: (请注意,您在导入时忘记预先添加Scraper,这导致了错误)
相关问题 更多 >
编程相关推荐