从不可变类型继承[重复]

发布于 2021-01-29 16:39:06

这个问题已经在这里有了答案

从str或int继承 (5个答案)

3年前关闭。

我想知道的继承是如何工作的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

我该怎么做呢?

关注者
0
被浏览
50
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您可以子类化int,但是由于它是 不可变的,因此
    您需要提供一个.__new__()构造函数挂钩

    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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看