为什么math.sqrt()被称为函数?由于点访问通常用于方法。是什么让math.sqrt()成为一个函数?

时间:2016-12-07 20:34:40

标签: python python-2.7 function python-3.x

例如:math.sqrt()被视为函数,但"Lower".upper()被称为.upper() 方法

为什么math.sqrt是一个功能?点访问不是指示方法吗?

1 个答案:

答案 0 :(得分:10)

因为math模块 * ,而不是

sqrt是模块math内定义的函数。您可以通过模块对象上的普通点.访问来访问已在模块中定义的对象。但是,对于模块,在访问期间不会发生功能对象的转换,对象按原样返回 具体而言,since functions are descriptors,当通过模块访问时,__get__未被调用。

upper是在str 中定义的函数。当您使用点访问在str实例上调用它时,它将转换成为方法,它隐式地接收该实例作为第一个参数。
具体来说,当通过类访问时,调用函数对象__get__,然后将函数转换为方法类型。

*好的,我讨厌这样做,因为它令人困惑,但是modules are also classes。它们的特殊之处在于它们不会像前面所描述的那样进行转换。具体来说,它们在请求属性时调用的getattribute函数并不像类的默认值那样。