如果这个问题放错地方或重复,我提前道歉。
这个问题本质上类似于双重链接列表迭代器 python。
但是,与引用的问题不同,我不希望创建一个包含大量元数据并提供迭代器的总体链表对象(它们对于我的应用程序不是必需的)。
我的问题是:有什么根本原因我不应该或不能提供一个不迭代它包含的元素的迭代器,而是跳过通过引用相互链接的不同元素对象?
迭代器对于代码的正常运行不是必需的,但我更喜欢for item in
构造的语法糖。
我的实现看起来有点像这样(简化版):
class LinkedAccount:
def __init__(self, someParameter, nextAccount = None, prevAccount = None):
self.someParameter = someParameter
self.next = nextAccount
self.prev = prevAccount
if nextAccount is not None:
self._tell_next()
if prevAccount is not None:
self._tell_prev()
def _tell_next(self):
if self.next is not None:
self.next._recv_next(self)
def _recv_next(self,prevAccount):
self.prev = prevAccount
def _tell_prev(self):
if self.prev is not None:
self.prev._recv_prev(self)
def _recv_prev(self,nextAccount):
self.next = nextAccount
def __iter__(self):
return AccountIterator(self)
class AccountIterator:
def __init__(self,Account):
self.Account = Account
def __iter__(self):
return self
def next(self):
if self.Account is None:
raise StopIteration
else:
curAccount = self.Account
self.Account = self.Account.next
return curAccount
LinkedAccount 对象提供了一个迭代器,该迭代器使用已存储在 LinkedAccount 对象中的 .next 参数从一个 LinkedAccount 迭代到下一个。
这种方法似乎有效,但 python 迭代器文档似乎假设迭代器将遍历父对象包含的元素。是否有任何陷阱阻止我做这样的事情?
谢谢!