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

时间:2017-12-17 11:39:57

标签: python python-2.7 sqlite python-requests

函数'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 

你能看出为什么会这样吗?

2 个答案:

答案 0 :(得分:2)

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

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

考虑重命名属性:

    self.barnlist = []

答案 1 :(得分:0)

您的barn方法会将self.barn设置为列表,从而覆盖自己。为列表使用不同的名称。