【发布时间】:2015-07-11 07:50:00
【问题描述】:
有一个类Tree234,它只有一个成员_pRoot,它是一个节点类型的对象。这里的 Node 本身就是一个类。
现在,当我尝试在 Tree234 类的任何方法中直接使用 _pRoot 时,它正在工作。但是,当我尝试通过将其等同于 _pRoot 的临时变量来使用它时,它不起作用。
以下是相关代码:
class Tree234:
#_pRoot = None
def __init__(self):
self._pRoot = Node()
def find(self, key):
pass
def insert(self, dValue):
pCurNode = self._pRoot
pTempItem = DataItem(dValue)
while True:
if pCurNode.isFull():
self.split(pCurNode)
pCurNode = pCurNode.getParent()
pCurNode = self.getNextChild(pCurNode, dValue)
elif pCurNode.isLeaf():
break
else:
pCurNode = self.getNextChild(pCurNode, dValue)
pCurNode.insertItem(pTempItem)
insert() 中的第一条语句没有做它应该做的事情。当控件到达 while 循环中的第一条语句时,我遇到以下错误:
AttributeError: 'NoneType' 对象没有属性 'isFull'
如果我只是用这个替换while循环中的第一条语句(只是为了测试):
if self._pRoot.isFull():
它接受属性并向前移动(为其他此类语句引发相同的错误,例如此处的 elif 条件)
所以很明显,pCurNode 被视为 None 类型,而不是我使用语句 pCurNode = self._pRoot 将其分配给 Node 类型对象
我已经花了几个小时试图弄清楚,但我仍然不知道这里发生了什么。所以决定问问各位。 我知道这里有一个非常愚蠢的东西,这导致了问题。但是想不通。
你能在这里找到问题吗?
【问题讨论】:
-
那么
pCurNode.getParent()和self.getNextChild(pCurNode, dValue)返回什么?其中一个返回了None,之后您循环回到while循环并得到错误。