【问题标题】:TypeError: "'TrieNode' object is not callable" - What is wrong with my code?TypeError:“'TrieNode' 对象不可调用” - 我的代码有什么问题?
【发布时间】:2017-07-22 20:42:56
【问题描述】:

我编写此代码来测试前缀树,但由于某种原因,我收到错误“TrieNode”对象不可调用。有人可以帮我解决这个错误吗?

为什么 TrieNode() 类不可调用?

# Prefix Tree or Trie Data Structure
class TrieNode(object):
    def __init__(self):
        self.children = {}
        self.endOfWord = False

class Trie(object):
    def __init__(self):
        self.root = TrieNode()

def insert(self,word):
    node = self.root()
    for w in word:
        if w not in node.children:
            node.children[w] = TrieNode()
        node = node.children[w]
    node.endOfWord = True

def search(self,word):
    node = self.root
    for w in word:
        if w not in node.children:
            return False
        node = node.children[w]

    return node.endWord

def startsWith(self,prefix):
    node = self.root
    for w in prefix:
        if w not in node.children:
            return False
        node = node.children[w]
    return True

if __name__ == "__main__":
    trie = Trie()
    trie.insert("apple")
    trie.insert("apples")
    trie.insert("bat")
    trie.insert("bate")    
    print trie.search("apple")

【问题讨论】:

  • 发布完整的错误,包括堆栈跟踪
  • node = self.root() 是您的错误。 self.root 已经是一个 TrieNode 实例,您正在尝试调用它。
  • 我从这里猜测:node = self.root(),但是为什么你会认为 TrieNode 实例是可调用的?
  • 在发布 python 代码之前检查缩进...

标签: python python-2.7 tree trie


【解决方案1】:

它应该是

def insert(self,word):
    node = self.root

在那里观看root() -> root。您当前正在调用实例属性,而实际上您只想获取对它的引用。

【讨论】:

  • 感谢@user272298,已修复。这是我这边的一个错字,我并不是要分配 root()
猜你喜欢
  • 2020-10-24
  • 1970-01-01
  • 2018-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-02
  • 2022-01-06
  • 2011-07-28
相关资源
最近更新 更多