在执行int()和float()时调用了什么?

时间:2016-08-25 14:50:54

标签: python constructor int

我理解当我这样做时:

>>> int(4.0)
>>> int('10')

将调用参数类中的__init__()方法(在示例中,分别为floatstr)。

我想知道如果我做int()会发生什么,我的意思是,没有任何争论。它不会从类__int__()调用NoneType,因为它没有实现该方法。

会发生什么?

另外,这是否意味着如果参数是int,我只能直接调用类int的构造函数?

谢谢,

1 个答案:

答案 0 :(得分:1)

在python everything is an object中,所以当你打电话:

x = int(y)然后调用构造函数int.__new__(cls, value=y)

返回一个int对象并将其分配给x

x可能有一个绑定到它的方法:x.__init__()在创建后控制它的设置,但首先创建对象由方法__new__()处理基类。

如果您没有为int()提供任何值,则构造函数调用的默认值为:

int.__new__(int, value=0)已被替换。然后如您所述,int没有__init__方法在创建后修改它的设置..