首页 > 解决方案 > 如何正确导入 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'

我不完全了解我应该如何构建这些项目以正确导入和处理类。任何帮助将不胜感激。

标签: pythonclasspython-import

解决方案


如何导入

首先你应该几乎总是使用import Xover 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()

推荐阅读