python - 如何正确导入 Python 类?
问题描述
我的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'
我不完全了解我应该如何构建这些项目以正确导入和处理类。任何帮助将不胜感激。
解决方案
如何导入
首先你应该几乎总是使用import X
over from X import *
。这是由于 X 是如何导入的。
简而言之,如果您使用import X
创建的对 X 的引用,您可以访问该引用,通过此引用,您可以访问 X 的所有属性,例如X.property
.
但是,如果您使用from X import *
,则导入对 X 的所有属性的引用。这意味着您可以通过简单地键入来访问 X 中的属性property
。这样做的缺点是,如果您已经有一个同名的属性,它将被覆盖。
有关导入的更多信息,您可以阅读这篇文章
问题的解决方案
回到你的问题;要解决导入问题,您应该像这样导入;
jsscraper.py:
import Scraper.JSScraper
# Access the scraper via JSScraper.JSScraper()
Scraper.JSScraper.py:(请注意,您忘记在导致错误的导入中添加 Scraper)
import Scraper.BaseScraper
# Access the base scraper via BaseScraper.BaseScraper()
更具可读性的解决方案
对于更具可读性的解决方案,您还可以使用别名进行导入import X.Y as z
,您可以像这样访问z.property
对您而言,这意味着以下内容:
import Scraper.JSScraper as scraper
# Access the scraper via scraper.JSScraper()
Scraper.JSScraper.py:(请注意,您忘记在导致错误的导入中添加 Scraper)
import Scraper.BaseScraper as base
# Access the base scraper via base.BaseScraper()
推荐阅读
- java - Java中的转置矩阵
- mysql - 存储 MD5 CHAR(32) 时选择什么 MySQL 排序规则?
- c# - .net core 控制台应用程序要求安装 .net Core
- python - 在不和谐机器人中编辑角色
- html - vb.net - 获取 webview 中显示的文本输入框的值并将其带回 winforms
- flutter - 颤振正确打印具有未来地图的地图
- vue.js - 我如何传递对象 vue js 的 id
- environment-variables - 您如何获得仅扫描指定目录的代码质量?
- nginx - nginx limit_req_log_level - 日志在哪里?
- javascript - Javascript 输入值