为何使用内置函数而非根类方法?

4 投票
4 回答
645 浏览
提问于 2025-04-15 11:15

(我知道这个问题可能很常见,但在网上搜索也不容易找到答案)

为什么Python用abs(x)而不是x.abs呢?

从我看到的情况来看,abs()除了调用x.__abs__之外,其他的功能其实也可以放在对象的abs()方法里实现。

这是历史原因吗?因为以前并没有一个根类吗?

4 个回答

0

Python是一种支持面向对象编程的语言,但它并不是一种纯粹的面向对象语言。正如你所提到的,Python中的类,即使是用户自己定义的类,也不一定都是从同一个基础类派生出来的。

在Python中,函数是实现功能的基本单位,所以一些核心操作(比如:str、dir、print、hash)看起来像函数是很合理的。

1

我觉得你提到的情况是一个典型的例子,语言设计者认为代码的可读性和简洁性比那些纯粹的写法更重要。

13

Guido van Rossum的官方回答,以及Fredrik Lundh的补充解释,可以在这里找到: http://effbot.org/pyfaq/why-does-python-use-methods-for-some-functionality-e-g-list-index-but-functions-for-other-e-g-len-list.htm

简单来说:

  1. 对于大多数操作,abs(x) 读起来比 x.abs() 更自然。

  2. 你知道 abs(x) 是在获取绝对值,而 x.abs() 这个方法可能会根据 x 的类型有不同的意思。

撰写回答