python - 为什么不能从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 的所有子类。我怎样才能实现这种导入?
解决方案
第一个有效,第二个无效,因为from
import 语句部分的路径与普通引用中的路径不同。
在一个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
这可以使第二种情况下的代码工作,但您可能不会认为它对第一种情况下的代码有很大改进。
推荐阅读
- c# - 在将 SingleValueExtendedProperties 放入图形事件时遇到问题,当我在调试中查看它时它总是出现 null
- javascript - AngularJS ng-repeat 不适用于 Promise.all
- nginx - 运行 nginx 时,我无法访问 gunicorn 提供的 Flask 网站
- java - 如何在 IntelliJ IDEA 中使用 Opencsv 注释?
- java - 当一个模块的依赖也是同一个 IntelliJ 项目中的一个模块时,管理本地 Maven 依赖版本
- python - 如何在使用 Selenium Python 之前定位伪元素 ::before
- swift - 移除 UIAlertController 结束动画
- jquery - 在 jQuery Ajax 中传递多个参数?
- heroku - 为什么我的 Heroku discord bot 没有上线?
- webstorm - 在 WebStorm 中为字符设置键盘快捷键