鍍金池/ 問(wèn)答/Python/ python3 中object.__init__() takes no para

python3 中object.__init__() takes no parameters 報(bào)錯(cuò)問(wèn)題

初學(xué)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)

為什么在不實(shí)現(xiàn)__init__方法時(shí)無(wú)報(bào)錯(cuò),而以上代碼會(huì)出現(xiàn)錯(cuò)誤?
忘解答

回答
編輯回答
不二心
import inspect
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):
        print(inspect.getargspec(super(IntTuple, self).__init__))    # 打印父類的__init__ 
        # ArgSpec(args=['self'], varargs='args', keywords='kwargs', defaults=None)
        print(iterable)

t = IntTuple([1,-1,'abc',6,['x','y'],3])
print(inspect.getargspec(t.__init__))    # 打印你自己定義的__init__
# ArgSpec(args=['self', 'iterable'], varargs=None, keywords=None, defaults=None)

你會(huì)發(fā)現(xiàn)tuple父類的__init__根本沒(méi)有參數(shù)傳遞,從報(bào)的錯(cuò)誤可以看出,tuple沒(méi)有實(shí)現(xiàn)__init__魔術(shù)方法,而是直接繼承的object。從傳遞的參數(shù)也可以看出來(lái),iterable還是那個(gè)沒(méi)處理的,而不是從__new__里傳遞過(guò)來(lái)的g

2018年8月14日 17:16