繁体   English   中英

如何通过变量名引用模块?

[英]How to reference a module by a variable name?

我知道这个问题的措辞可能有点不对,但请允许我解释一下。 这也是一个通用的python问题,但我用一个特定的案例来解释它


[我正在处理来自dash_bootstrap_components 的一组样式表或主题 现在我偶然发现了一个更普遍的 python 问题,我一直想知道这个问题。 您可以使用以下代码段设置 Dash 应用程序,其中最后一行指定样式表:

from jupyter_dash import JupyterDash
import dash_bootstrap_components as dbc
app = JupyterDash(external_stylesheets=[dbc.themes.SLATE])

但是,假设我想使用变量名称而不是其显式名称SLATE来分配该主题 - 例如,在设置另一个样式表或让特定样式表成为用户选择的选项时。 如何使用变量名称而不是SLATE遍历模块或选择主题?

帖子如何获取特定 Python 模块中的变量列表? 显示了如何使用以下方法循环访问这样的模块:

[item for item in dir(dbc.themes) if not item.startswith("__")]

但我仍然需要以某种方式选择主题。 这些是我尝试过的一些事情:

myVar = 'SLATE'
themed_app = JupyterDash(external_stylesheets=[dbc.themes[myVar])

我确实意识到缺乏基本的 Python 理解是这里的问题,但我真的很想知道为什么会失败以及可以做些什么。

使用getattr动态访问属性。

themed_app = JupyterDash(external_stylesheets=[getattr(dbc.themes, myVar)])

您可以使用eval作为动态访问的另一种解决方案

var = "SLATE"
sheet = f"dbc.themes.{var}"    
themed_app = JupyterDash(external_stylesheets=[eval(sheet)])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM