继承自不可变类型

时间:2013-02-26 09:50:53

标签: python string list inheritance int

我想知道继承如何适用于intliststring和其他不可变类型。

基本上我只是继承了这样一个类:

class MyInt(int):
    def __init__(self, value):
        ?!?!?

我似乎无法弄清楚,如何设置为int设置的值?如果我self.value = value,那么我的课程就会像这样使用:

mi = MyInt(5)
print(mi.value) # prints 5

我希望像这样使用它:

mi = MyInt(5)
print(mi) # prints 5

我该怎么做?

1 个答案:

答案 0 :(得分:7)

您可以创建int的子类,但由于它是 immutable ,您需要提供.__new__() constructor hook

class MyInt(int):
    def __new__(cls, value):
        new_myint = super(MyInt, cls).__new__(cls, value)
        return new_myint

您需要调用基础__new__构造函数来正确创建子类。

在Python 3中,您可以完全省略super()的参数:

class MyInt(int):
    def __new__(cls, value):
        new_myint = super().__new__(cls, value)
        return new_myint

当然,这假设您希望在返回value之前操纵super().__new__()或在返回之前操纵new_myint更多;否则,您也可以删除整个__new__方法,并将其实现为class MyInt(int): pass