【问题标题】:Python - Why are classes listed in the list of built-in functions?Python - 为什么内置函数列表中列出了类?
【发布时间】:2018-07-04 12:14:25
【问题描述】:

Python 文档将 property() 列为 built-in function

但是,在文档中,函数 description 前面有关键字“class”。

属性(fget=None, fset=None, fdel=None, doc=None)

这也发生在

设置([iterable])

切片(停止)

这是什么意思? - 为什么类在内置函数下列出。这只是文档问题还是有技术原因?

编辑:我不是在问 property() 是如何工作的。

【问题讨论】:

  • 我不明白为什么这是重复的。我不是在问@property 装饰器是如何工作的,我是在问为什么它是一个列为函数的类。
  • 如果你想学究气,你是对的,但既然一个类可以像函数一样被调用,那么区别就没有了。 property 不是唯一的例子,strintfloatsetlisttype 等等都被列为函数,但都是类。这确实是一个文档问题,仅此而已。
  • 文档说“...有许多函数和 types 内置...”,property 是这些类型构造函数之一,see cpython ref ,顺便说一句,我改变主意并投票重新开放。
  • 我的问题是否值得在 SO 上发帖与是否重复是完全不同的问题。将我的问题标记为重复问题会阻止我得到问题的正确答案,无论问题多么微不足道。如果答案确实是文档的标题是次优的(而不是其他一些技术原因),那么为什么不能回答这个问题呢?
  • 我宁愿这里的其他爱好者之一发表答案;我唯一能说的就是因为它是一个类,太琐碎了。

标签: python


【解决方案1】:

Python glossary 将函数定义为:

返回一些值给调用者的一系列语句。它也可以传递零个或多个参数,这些参数可以在主体的执行中使用。

一个类可以传递参数,并返回一个值给调用者,因此可以说类函数*。

此外(正如 deceze 在 cmets 中指出的那样),一个类应该总是返回一个自身的实例——setpropertyslice 等。所有返回的实例都是 setproperty , slice, 等等 - 所以set, property 和朋友都是也是类,所以他们被记录为这样:

设置([可迭代])

意味着set 是一个类,而不是它返回一个。

我猜set 等记录在“内置函数”页面中,因为 a) 它们是可调用的,b) 将“可以调用的东西”的所有文档放在一个地方很方便.

*严格来说,isinstance(C, types.FunctionType) 对于任何类 C 都是错误的(据我所知),但类肯定是可调用的(isinstance(C, typing.Callable) 是真的),这可能是一个更有用的属性值得考虑.

【讨论】:

  • 我认为还有一个原因可能是我们应该理解这些不仅仅是函数(或更准确地说,作为函数工作),它们也是具有关联属性的类。
  • 所以你的意思是文档的标题应该是“Built in Callables”,因为函数、类和装饰器都是可调用的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-08
  • 1970-01-01
  • 2020-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-07
相关资源
最近更新 更多