在没有导入的情况下使用子模块会出错

Usage of submodules without import gives error

这可能不是最好的 MWE,但我不确定这是一个特定问题还是我只是不了解基本知识。这有效:

import matplotlib as mpl
import matplotlib.backends.backend_tkcairo as tkcairo
fig = mpl.figure.Figure()
canvas = tkcairo.FigureCanvasTkCairo(fig)

我认为这也应该有效:

import matplotlib as mpl
fig = mpl.figure.Figure()
canvas = mpl.backends.backend_tkcairo.FigureCanvasTkCairo(fig)

但它没有(模块 'matplotlib' 没有属性 'figure')。为什么这不起作用,为什么与 mpl.figure.Figure() 有关的错误在两个 MWE 之间没有区别?

matplotlib 不会自动导入子模块 figure 或子模块 backends,但 backends.backend_tkcairo 会导入 figure.

仅仅导入一个模块并不意味着所有的子模块都会一起运行。这要看这些怎么写了。

在这种情况下,最好显式导入您需要的子模块。