【发布时间】:2016-09-28 13:39:24
【问题描述】:
我正在尝试定义一个链表类 Hlist,如下所示:
class Hlist:
def __init__(self, value, hlnext):
self.value = value
self.hlnext = hlnext
def pop(self):
res = self.value
if not(self.hlnext == None):
self = self.hlnext
return res
def __repr__(self):
return (str(self.value) + ' - ' + str(self.hlnext))
当我在
上测试 pop() 方法时a = Hlist(1, Hlist(2, None))
Python 返回 1 - 2 - 无,好的。那么
a.pop()
返回 1,很好。但是:
print(a)
返回 1 - 2 - 无。尽管
self = self.hlnext
self 是指针 a 还是指向与 a 相同地址的另一个指针? 以及为什么下面的代码会返回 pop() 的预期答案:
class Hlist:
def __init__(self, value, hlnext):
self.value = value
self.hlnext = hlnext
def pop(self):
res = self.value
if not(self.hlnext == None):
self.value = self.hlnext.value
self.next = self.hlnext.hlnext
return res
def __repr__(self):
return (str(self.value) + ' - ' + str(self.hlnext))
是不是因为python使用了setattr函数?
实际上,我试图在 Python 中获得与 Java 中以下类的等价物:
class Hlist{
int value;
Hlist hlnext;
Hlist(int value,Hlist hlnext){
value = value;
hlnext = hlnext;
}
}
并为其添加一个 pop() 方法。在 pop() 方法中,Java 的 this 会以与 Python 的 self 相同的方式工作(局部变量)还是会绑定到我称为 pop() 的指针上?在那种情况下,this = this.hlnext 是否会改变a 指针?
【问题讨论】:
标签: python pointers linked-list