Python:不能在类中使用函数两次,TypeError:'list'对象不可调用,为什么? [关闭]

问题描述 投票:0回答:2

函数'barn'将使用sqlite3进入数据库,并将返回一个包含给定名称子项名称的列表,它在我第一次调用该函数时工作正常但第二次调用它时给了我错误:

Traceback (most recent call last):
  File "<pyshell#34>", line 1, in <module>
    a.barn('David')
TypeError: 'list' object is not callable

我的代码:

class barn:
    def __init__(self):
        self.datapers=[]
        self.pappor=[]
        self.mammor=[]

        c.execute("SELECT name FROM person")
        for namn in c:
            self.datapers.append(str(namn[0]))

        c.execute("SELECT far FROM parent")
        for pappa in c:
            self.pappor.append(str(pappa[0]))

        c.execute("SELECT mor FROM parent")
        for mamma in c:
            self.mammor.append(str(mamma[0]))

    def barn(self,namn):
        self.barn=[]
        self.barnid=[]


        if namn in self.pappor:
            print "Pappa :"+namn
            self.b=c.execute("SELECT id FROM parent WHERE far=?;",(namn,))
            conn.commit()
            for barnXID in self.b:
                self.barnid.append(barnXID[0])
            for barnID in self.barnid:
                c.execute("SELECT name FROM person WHERE id=?;",(barnID,))
                self.barn.append(str(c.fetchone()[0]))
                conn.commit()
                return 

你能明白为什么会这样吗?

python python-2.7 sqlite python-requests
2个回答
2
投票

在调用方法barn之后,您将使用空列表替换它,该列表不是可调用对象。

def barn(self,namn): 
    self.barn=[]

考虑重命名属性:

    self.barnlist = []

0
投票

你的barn方法通过将self.barn设置为列表来覆盖自己。为列表使用不同的名称。

© www.soinside.com 2019 - 2024. All rights reserved.