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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python:不能在类中使用函数两次,TypeError:'list'对象不可调用,为什么? [关闭]相关的知识,希望对你有一定的参考价值。

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

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

答案

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

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

考虑重命名属性:

    self.barnlist = []
另一答案

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

以上是关于Python:不能在类中使用函数两次,TypeError:'list'对象不可调用,为什么? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在类中使用导入

在类中定义多个构造函数

Python 类中的变量范围

Python 类中的变量范围

PHP如何在类中调用另一个文件的类

python 在类中从一个函数中调用另一个函数中的变量