Python“NoneType”对象没有属性“…”

2024-06-16 13:10:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python上遇到了一个问题,我编写了这个类

class TNode(object):
    def __init__(self, name):
        self.name=name
        self._children=[]
    def add(self, c):
        self._children=self._children +[c]
    def children(self):
        t=[]        
        for f in self._children:
            t+=f
        return t
    def height(self):
        h = 1
        for node in self._children:
            h = max(h, node.height() + 1)
        return h
    def count(self):        
        cnt = 1
        for node in self._children:
            cnt += node.count()
        return cnt
    def count_by_name(self, name):
        cbn=0
        for node in self._children:
            cbn+=node.count(name)
        return cbn          
    def paths(self, name):
        pset = set()
        if self.name == name:
            pset.add((name,))
        for node in self._children:
            for p in node.path(name):
                pset.add((self.name,)+p)
        return pset

写后函数:

^{pr2}$

这是字典:

d = {'name':'musica', 'children':
                  [{'name':'rock', 'children':
                                   [{'name':'origini','children':[]},
                                    {'name':'rock&roll','children':[]},
                                    {'name':'hard rock', 'children':[]}]},
                   {'name':'jazz', 'children':
                                   [{'name':'origini', 'children':
                                                       [{'name':'1900', 'children':
                                                                        [{'name':'origini','children':[]}]}]},
                                    {'name':'ragtime', 'children':[]},
                                    {'name':'swing', 'children':[]}]}]}

我试着做一些手术,比如:树.count(), 树.路径()或树.高度{cdi>有相同的反应

希望你能帮助我:)


Tags: nameinselfaddnodeforreturndef
1条回答
网友
1楼 · 发布于 2024-06-16 13:10:57

我觉得你的设计有问题。在

根据您的代码,tree不是TNode实例:

def create_tree(d):
    root=TNode(d['name'])   
    for node in (d['children']):
        if len(d['children'])!=0:
            child=TNode(node['name'])
            tree=root.add(child) 
            create_tree(node)
    return tree

tree是方法add()的返回值,它是None。在

您可以在root上调用count()或{},但不能在tree上调用。在

也许你想返回root而不是{}?在

相关问题 更多 >