理解python中的点符号

时间:2017-07-19 00:38:27

标签: python python-3.x

当我导入一个模块,比如sys时,我假设我正在导入一个脚本,为了访问它的功能,我必须使用点表示法。 例如,我想写一些东西到控制台:

    sys.stderr.write("Error")

在这里,我访问stderr"功能?"从模块sys,但然后我访问其write属性,这也是一个函数?我如何知道stderr是否是一个子类化sys的类,或者它是否是一个函数?

非常感谢。

2 个答案:

答案 0 :(得分:3)

导入模块后(如sys或其他任何东西),点符号可能会引用它包含的任何内容。你也可以导入一个'包'包含模块,类,类中的方法,模块中的函数等。

>>> import sys
>>> type(sys)
<class 'module'>
>>> sys.stderr
<_io.TextIOWrapper name='<stderr>' mode='w' encoding='cp437'>
>>> type(sys.stderr)
<class '_io.TextIOWrapper'>
>>> type(sys.stderr.write)
<class 'builtin_function_or_method'>
>>>

它意味着是通用的属性排序访问,其中另一个内容通过点访问,就像它是该对象的属性一样。

我认为这是不明确的,因此模块/包的用户不需要关心这些对象的实现细节。如果它们发生变化,只要维护结构和名称,它引用的实际对象就不会引起用户的关注。他们总是可以使用type()help()查看详细信息或使用其他内省工具。

答案 1 :(得分:0)

点是一个通用的元素引用,而不仅仅是一个函数。这表示获取stderr的{​​{1}}元素,然后获取sys的{​​{1}}元素。为此,write必须是包含元素的对象,stderr必须是函数...因为括号表示我们正在尝试调用stderr

我们必须知道每个元素的一般语义:哪些是包,它们是常量,它们是函数等。