为什么导入_single_leading_underscore函数?

时间:2016-11-20 02:38:11

标签: python

我在PEP 8中发现如下。

  

_single_leading_underscore:弱"内部使用"指示符。例如。 "来自M import *"不会导入名称以。开头的对象   下划线。

我通过编码来测试它。我做了两个档案。一个是" imports_A.py",另一个是" A.py"。我编码如下。

imports_A.py:

from A import *
a_class = Test()
a_class._single_underscore()

A.py:

class Test:
  def _single_underscore(self):
    print("executed _single_score()")

并执行" imports_A.py"。我预计结果会说找不到_single_underscore函数,因为单个下划线函数是"弱内部使用"指示。但是,结果是执行良好的打印"执行_single_score()"。

我无法知道什么是错的。你能告诉我什么吗? 谢谢。

1 个答案:

答案 0 :(得分:3)

from A import *导入了班级Test。如果你有另一个班级...... _Test,它不会被导入。

基本上,一旦导入了一个对象,就可以访问它的所有方法/属性。前导下划线仅阻止导入顶级对象(仅在使用from module import *时)。

e.g。使用以下a.py

class Test(object):
    pass

class _Test(object):
    pass

我们得到:

>>> from a import *
>>> Test
<class 'a.Test'>
>>> _Test
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name '_Test' is not defined