繁体   English   中英

如何在 python 中调用 class 方法?

[英]How can i call the class method in python?

我创建了一个名为 LinkedList 的 class 和一个名为 find() 的 class 内部的方法。

我试图在 function 中调用此方法,但它总是返回以下错误:

Traceback (most recent call last):
  File "main.py", line 44, in <module>
    BinaryInsertionSort(l.head, l.length())
  File "main.py", line 26, in BinaryInsertionSort
    item = list.find(i).data
AttributeError: 'Node' object has no attribute 'find'

我有另一个名为 Node 的 class,但我认为这不会影响任何事情。

请有人帮助我。 我不知道出了什么问题......

这是整个代码的链接: https://repl.it/@Mimik1/InsertionSortWithLinkedList#main.py

这是一个大学项目,所以我根本无法更改二进制插入排序,但如果它是错误的,请告诉我。

您的 class 结构表明链表包含节点链。 因此,当您调用l.head时,您会返回一个Node而不是另一个LinkedList ,这就是您遇到错误的原因。 Node没有LinkedList具有的操作。 您可以设计您的LinkedList ,使其在链中的每个链接处由其自身组成,而不是由Node组成,这将缓解此问题。

问题的 scope 之外的其他一些评论:

我注意到您将一些 integer 类型 arguments 设置为默认值None 通常,将它们设置为默认 integer 似乎更好(如 main.py 第 23 行中的 0)。

我还会查看您添加节点的逻辑,因为直观地看起来头部不应该随着我添加更多节点而改变。 列表的头部是不变的,而我会假设列表的尾部始终是最后一个节点。

在 LinkedList.py 中的方法添加中,您将节点 object 分配给成员头。 稍后将其提供给BinaryInsertionSort ,它需要 LinkedList 类型的 Object 而不是节点。 所以问题是 main.py 第 44 行中的调用BinaryInsertionSort(l.head, l.length()) 。通过item = list.find(i).data调用 class 方法没问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM