python - “节点”对象不可调用
问题描述
我有以下代码:
class Node:
def __init__(self,data):
self.data = data
self.next = None
class linkedList:
def __init__(self):
self.top = None
def isempty(self):
return self.top== None
def push(self,data):
new_node = Node(data)
#if self.top ==None:
# self.top= new_node
# return
new_node.next = self.top
self.top = new_node
def pop(self):
if self.top ==None:
print('underflow comdition')
return
temp = self.top
self.top = self.top.next
return temp.data
def top(self):
if self.isempty():
print('empty stack')
return
return self.top.data
def printstack(self):
if self.isempty():
return
temp = self.top
print('stack from top')
while temp != None:
print(temp.data)
temp = temp.next
llist = linkedList()
llist.push(5)
llist.push(7)
llist.push(9)
llist.push(11)
llist.push(13)
llist.push(15)
llist.push(17)
llist.pop()
llist.pop()
llist.top()
llist.pop()
llist.push('oolala')
llist.printstack()
但我收到以下错误:
TypeError Traceback (most recent call last)
<ipython-input-16-a71ab451bb35> in <module>
47 llist.pop()
48 llist.pop()
---> 49 llist.top()
50 llist.pop()
51 llist.push('oolala')
TypeError: 'Node' object is not callable
我该如何解决?
解决方案
您覆盖了属性top
:它不能既是变量又是方法。
首先,您将其定义为方法:
def top(self):
...
但是,稍后,您使用top
节点属性覆盖它:
self.top = new_node
top
现在是 a Node
,你不能调用节点。
我建议您更改方法名称;作为一般做法,方法应该是动词,就像您使用push
and所做的那样pop
。
def show_top(self):
if self.isempty():
print('empty stack')
return
return self.top.data
...
llist.pop()
llist.show_top()
llist.pop()
llist.push('oolala')
llist.printstack()
推荐阅读
- javascript - 我应该如何将数据从后端传递到 node.js 和 express 中的前端 js 文件
- c# - ASP.Net Core MVC 中的删除操作问题
- dataframe - 如何在不保存在本地的情况下将对象(.csv,.sav)上传到 azure blob?
- php - barryvdh/laravel-dompdf 检查页面是否损坏?
- javascript - event.preventDefault() 仅在 iOS 14 上防止平移手势触摸
- nestjs - 在 NestJs 中配置依赖 DynamicModules 的最佳方式
- python - 如何使我的 python 代码更快地求和?
- spring-boot - java - 如何在junit测试类中将配置类映射到springboot中的application.properties?
- registry - 防火墙上下文菜单注册表(允许/阻止双向)
- express - 当 html 文件存在时,重定向在 express js 中不起作用