不明白为什么在尝试调用继承的方法时发生此TypeError

时间:2018-10-26 08:58:27

标签: python inheritance linked-list python-3.6 python-import

首先,我正在使用python 3.6。

我正在尝试import,并在项目中使用自己的.py文件。我import我的LinkedList.py文件,并创建一个Mylist类,该类扩展了导入文件的类。

当我尝试构造Mylist类的实例(其中涉及创建我的inheritedLinkedList派生类的实例)时,出现以下错误:

Traceback (most recent call last):
  File "*/PycharmProjects/Veri Yapilari/lists.py", line 65, in <module>
    test = Mylist()
  File "*/PycharmProjects/Veri Yapilari/lists.py", line 38, in __init__
    self.linkedlist = inheritedLinkedList()
  File "*/PycharmProjects/Veri Yapilari/lists.py", line 8, in __init__
    super.__init__()
TypeError: descriptor '__init__' of 'super' object needs an argument

这是发生问题的代码部分:

test = Mylist()
test.insertFirstM(incomingDataM=4)  # <- Causes a TypeError.

以下是整个脚本的主要内容:

import LinkedList as myLinkedList


class inheritedLinkedList(myLinkedList.DoublyLinkedList):
    def __init__(self):
        super.__init__()
    def raplaceElements(self, dataToBeChanged, incomingData):
        position = self.find(dataToBeChanged)
        position.data = incomingData
    def swapElements(self, swap1, swap2):
        position1 = self.find(swap1)
        prev1 = position1.previous
        next1 = position1.next
        position2 = self.find(swap2)
        prev2 = position2.previous
        next2 = position2.next

        prev1.next = position1
        position1.previous = prev1
        position1.next = next1
        next1.previous = position1

        prev2.next = position2
        position2.previous = prev2
        position2.next = next2
        next2.previous = position2
    def insertBefore(self, incomingData, previousNode=None):
        self.insert(incomingData, self.find(previousNode).previous.data)


class Mylist:
    def __init__(self):
#        self.linkedlist = inheritedLinkedList;
        self.linkedlist = inheritedLinkedList()  # Per martineau's suggestion.

    def replaceElements(self, dataToBeChanged, incomingData):
        self.linkedlist.raplaceElements(dataToBeChanged, incomingData)

    def swapElements(self, swap1, swap2):
        self.linkedlist.swapElements(swap1, swap2)

    def insertFirstM(self, incomingDataM):
        self.linkedlist.insertFirst(incomingDataM)

    def insertLast(self, incomingData):
        self.linkedlist.insert(incomingData)

    def insertAfter(self, incomingData, incomingNode):
        self.linkedlist.insert(incomingData, incomingNode)

    def insertBefore(self, incomingData, incomingNode):
        self.linkedlist.insert(incomingData, incomingNode)

    def remove(self, incomingData):
        self.linkedlist.remove(incomingData)

    def listprint(self):
        self.linkedlist.listprint()


test = Mylist()
test.insertFirstM(4)

如果需要,可以从我的github repository下载导入的LinkedList模块(LinkedList.py)的代码。

1 个答案:

答案 0 :(得分:0)

正如我在评论中所说,您没有正确使用内置的super。尝试以这种方式进行操作(因此,就像链接文档中的示例一样):

class inheritedLinkedList(myLinkedList.DoublyLinkedList):
    def __init__(self):
        super().__init__()  # Change line to this.

实际上,由于派生类的__init__()目前什么也不做,所以甚至没有必要,因为如果子类没有定义自己的类,那会自动发生。换句话说,以下将完成相同的操作:

class inheritedLinkedList(myLinkedList.DoublyLinkedList):
#    ** NOT REALLY NEEDED AT ALL **
#    def __init__(self):
#        super().__init__()

P.S。您还应该更改 LinkedList.py 脚本的末尾,以便在{{1}将其import设置为模块时,最后几行不执行}}:

lists.py