首页 > 解决方案 > 为什么不能从python中的主类导入子类

问题描述

嗨,在 Selenium,我想从库中导入一个子类,但我做不到。下面完全没问题;

from Selenium import webdriver 
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions

但为什么我不能这样做:

from Selenium import webdriver
_WebDriverWait = webdriver.support.ui.WebDriverWait
_expected_conditions = webdriver.support.expected_conditions

我想这样做的原因是在编辑器中,我试图提供一种沙箱环境,并希望用户能够使用预导入的 selenium 的所有子类。我怎样才能实现这种导入?

标签: pythonpython-import

解决方案


第一个有效,第二个无效,因为fromimport 语句部分的路径与普通引用中的路径不同。

在一个from子句中,Python 愿意通过目录结构跟踪路径,即使路径中的所有名称之前都没有被导入。作为一个普通的参考,它不愿意这样做。

Real Python 的关于导入系统的文章的话来说,“一般情况下,导入包时不会导入子模块和子包”。

有时,__init.py__包的脚本会为您导入包的部分或全部内容,因此您不必担心,但在这种情况下,Selenium 不会为support包的__init.py__脚本中的webdriver包执行此操作。

ui因此,您可以通过添加行来显式导入和expected_conditions模块,从而使第二种情况中的引用起作用:

from selenium.webdriver.support import ui, expected_conditions
_WebDriverWait = ui.WebDriverWait
_expected_conditions = expected_conditions

这可以使第二种情况下的代码工作,但您可能不会认为它对第一种情况下的代码有很大改进。


推荐阅读