我在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()"。
我无法知道什么是错的。你能告诉我什么吗? 谢谢。
答案 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