初学python
代码如下:
class IntTuple(tuple):
def __new__(cls, iterable):
g = (x for x in iterable if isinstance(x,int) and x > 0)
return super(IntTuple, cls).__new__(cls, g)
def __init__(self, iterable):
super(IntTuple, self).__init__(iterable)
t = IntTuple([1,-1,'abc',6,['x','y'],3])
print(t)
为什么在不实现__init__方法时无报错,而以上代码会出现错误?
忘解答
你会发现tuple父类的__init__根本没有参数传递,从报的错误可以看出,tuple没有实现__init__魔术方法,而是直接继承的object。从传递的参数也可以看出来,iterable还是那个没处理的,而不是从__new__里传递过来的g