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
в список. Используйте другое имя для списка.