当我导入一个模块时,比如 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/