Skip to main content
 首页 » 编程设计

python之int ('123' ) in python之它是 'int' 类的函数调用还是构造函数调用

2025年05月04日11birdshome

我是学Python的,对Python的数据类型有点迷茫。我一遍又一遍地阅读这一行。:

'Everything is an object in Python'

这包括整数、 float 、字符串、集合、列表等,当我们这样写时:[1, 2, 3],所以我们实际上是在创建一个的对象列出类(或不)?那么,当我们写一个像 123 这样的整数时,是否意味着它是 int 类的对象?但是我们看书上说要将字符串转换成整数需要用到int方法?

但我想的是 int 是一个类,它也接受构造函数中的字符串对象,然后我们得到整数对象,对吧?

那么,int 是 Python 中的方法还是类?

请您参考如下方法:

是的 int 是一个类(它也被称为类型;参见 Python : terminology 'class' VS 'type' ),并且执行 int('123') 返回一个 int 对象。

但是,(在标准 Python 中也称为 CPython 中)对于小整数(在 -5 到 256 范围内,包括边界值),int 构造函数实际上并不构建新的整数对象。出于效率原因,解释器有一个小整数缓存,构造函数只返回对现有 int 对象的引用。 “is” operator behaves unexpectedly with integers 的答案中讨论了该主题.

您的书调用 int() “int 方法”有点草率,恕我直言。迂腐地说,int本身就是一个类,它是一个可调用对象,当你调用一个类时,这个调用会自动转换为调用类的构造方法(即它的__new__ 方法)。但非正式地,通常将 int() 称为函数调用或方法调用。

我差点忘了你第一段中的问题。当我们写

[1, 2, 3] 

解释器创建 3 个 int 对象并将它们放入一个新的 list 实例中。 (更准确地说,它将对 int 对象的引用放入列表中)。

使用标准dis module您可以反汇编此操作的字节码:

from dis import dis 
dis('a=[1,2,3]')     

输出

  1           0 LOAD_CONST               0 (1) 
              3 LOAD_CONST               1 (2) 
              6 LOAD_CONST               2 (3) 
              9 BUILD_LIST               3 
             12 STORE_NAME               0 (a) 
             15 LOAD_CONST               3 (None) 
             18 RETURN_VALUE 

因此,即使我们“只是”创建一个文字列表,它仍然是一个成熟的 list 实例对象。与某些 OOP 语言不同,Python 没有任何不是对象的“原始”数据类型,因此文字整数和文字字符串也是对象。因此,文字字符串配备了所有标准字符串方法。例如,

print('hello'.lower) 

输出

built-in method lower of str object at 0xb72e7880> 

向我们展示了文字字符串 'hello' 具有标准的 lower() 方法。