Python: не могу использовать функцию в классе дважды, TypeError: объект списка не вызывается, почему?

Функция '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 ответа

Сразу после вызова метода barn, вы заменяете его пустым списком, который не является вызываемым объектом.

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

Рассмотрите возможность переименования атрибута:

    self.barnlist = []

Ваш barn Метод перезаписывает себя путем установки self.barn в список. Используйте другое имя для списка.

Другие вопросы по тегам