模块名称下划线

时间:2019-08-16 09:13:51

标签: python module

此代码:

import matplotlib.pyplot as plt
fig, axes = plt.subplots(12,2, figsize = (12,40), squeeze=False)
print(type(axes[0,0]))

给出以下输出:

<class 'matplotlib.axes._subplots.AxesSubplot'>

为什么模块名称“ _subplots”中有一个下划线?

这不是以下问题的重复,因为我的问题仅涉及模块命名,而不涉及其他情况。 What is the meaning of a single and a double underscore before an object name?

3 个答案:

答案 0 :(得分:1)

作为一般规则,如果您遵循PEP8标准,则任何名称前面的单个下划线都表示该实体并不表示是官方API,而是在内部使用。尽管它仍然可见,并且Python将其视为其他任何类/变量/模块,所以如果您完全知道自己在做什么,请随时使用它。

双下划线旨在“隐藏”某些内容(使其成为某种方式私有)。 Python将对此有所不同,并使用名称修饰,以便不能立即访问。在__foo中将无法访问类Bar中的属性名称bar.__foo,因为python在运行时会将其重命名为bar._Bar__foo

编辑

对于特定模块,它具有相同的用途。单个“ _”表示模块中的所有类/函数/常量仅用于“弱”内部使用。这并不意味着您应该从不使用它们,而是意味着您已经了解/理解了程序包的内部功能。

答案 1 :(得分:0)

这是因为编写matplotlib的人用下划线命名了它。

不仅仅是matplotlib拥有它,这实际上意味着受保护的属性。

答案 2 :(得分:-1)

因为_subplots是轴的受保护属性。 “ _”表示受保护的属性,“ __”表示专用属性。您可以阅读有关Python中受保护/私有属性的更多信息:https://www.tutorialsteacher.com/python/private-and-protected-access-modifiers-in-python