python - 理解 python 中的点符号

标签 python python-3.x

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

    sys.stderr.write("Error")

在这里,我访问了 stderr“功能?”来自模块 sys,但随后我访问了它的 write 属性,这也是一个函数?我如何知道 stderr 是一个继承 sys 的类,还是一个函数?

非常感谢。

最佳答案

一旦您导入了一个模块(如 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() 查看细节或使用其他内省(introspection)工具。

关于python - 理解 python 中的点符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45179186/

相关文章:

python - 通过 pandas.read_excel 跳过标题后的行范围

python - 如何为已经实例化的类 python 覆盖 __repr__ 方法

具有 Alpha channel 背景的 Python 文本

python - 将静态文件服务从 flask 更改为 nginx?

python - Repl.it 和 FFmpeg

python - 多次选择并复制一个随机文件

python - Python 3.5 + Pillow 是否不支持 RGBA PNG?

python - 如果我知道第一个字段值,如何从模型中获取另一个字段值?

python - 打印到(并覆盖)状态指示器的同一行

python - 用 Python 计算字符串中的大写字母