Python:使用Int Superclass获取TypeError:int()无法使用显式base转换非字符串

时间:2015-10-31 19:43:40

标签: python

使用以下代码,我收到以下错误:

class C4(int):
    def __init__(self,name1,name2):
        self.name1=name1
        self.name2=name2

当执行上面的代码时,我收到错误:

C4_inst=C4(3,6)
TypeError: int() can't convert non-string with explicit base

当我只为__init__使用一个参数时,我没有看到错误。你能否详细说明为什么当这里的目标是用3,6实例化C4时,python会尝试将参数转换为int。 我试图将C4作为" int"的子类,以便我可以使用为" int"定义的运算符。键入C4类。

1 个答案:

答案 0 :(得分:2)

基类int类型是不可变的,因此其参数在其__new__方法中解释,而不是__init__。由于您尚未定义自己的__new__方法,因此正在调用基类的版本,并且它不了解您的参数。可以使用两个参数初始化int,但第一个必须是字符串,第二个必须是整数(基数)。

尝试添加正确初始化整数值的__new__方法:

class C4(int):
    def __new__(cls, name1, name2):
        return super(cls, C4).__new__(cls)  # let int.__new__ create a new value.
    def __init__(self, name1, name2):
        self.name1=name1
        self.name2=name2

请注意,由于我们未向int.__new__传递任何参数,因此我们的新实例将等于0(因为我们没有__repr____str__方法,它也会打印为0)。如果您希望对象的行为类似于其int个参数之一(或其他一些非零值),那么您希望在调用int.__new__时传递该对象。