我想知道继承如何适用于int
,list
,string
和其他不可变类型。
基本上我只是继承了这样一个类:
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 :(得分: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
。