导入Axes3D会改变add_subplot的行为方式 - 这是一种命名空间违规吗?

6 浏览
0 Comments

导入Axes3D会改变add_subplot的行为方式 - 这是一种命名空间违规吗?

这一直是我困惑的一个问题:导入Axes3D(这只是我们这里使用的某种Python对象)似乎会改变一个不相关的函数add_subplot,而该函数来自另一个模块。这是怎么发生的?这难道不违背了命名空间的整个理念吗?\n我的意思是:\n

>>> import matplotlib.pyplot as plt
>>> f = plt.figure()
>>> ax = f.add_subplot(111, projection='3d')
# 失败,报错:ValueError: Unknown projection '3d'
>>> from mpl_toolkits.mplot3d import Axes3D
>>> ax = f.add_subplot(111, projection='3d')
# 成功!

\n起初,我以为这和from __future__ import print_function类似,后者在命名空间中神奇地引入了一个名为print的函数。但是,正如事实证明的那样,那确实是一种魔法,而且只适用于__future__模块。\n那么,Axes3D是如何工作的呢?

0