在Python中使用__str__打印对象时遇到问题



我在使用__str__使对象按我希望的方式打印时遇到问题。我希望每个Task对象都打印有单词";完成"如果任务已经完成(即任务对象的索引2等于1(,但每次我调用viewCompleted((时,程序都会将每个对象作为元组返回。

调用viewCompleted((的主模块中的if语句:

import Task_List_Database as tld
if user_command.lower() == "history":
tld.viewCompleted()

对象构造函数和__str__

class Task:
def __init__(self, taskID, description, completed):
self.taskID = taskID
self.description = description
self.completed = completed
def __str__(self):
return self.description + " DONE!"
import sqlite3
import Task_List_Objects as tlo
conn = sqlite3.connect("task_list_db.sqlite")
c = conn.cursor()
def readDatabase():
query = '''SELECT * FROM Task'''
c.execute(query)
tasks = c.fetchall()
for task in tasks:
tlo.Task(task[0], task[1], task[2])
return tasks
def viewCompleted():
tasks = readDatabase()
task_count = 1
for task in tasks:
if task[2] == 1:
print(task)
task_count += 1
print()

出现__str__问题的输出:

Command: history
(1, 'Get bike fixed', 1)
(2, 'Call your mom', 1)
(3, 'Buy toothbrush', 1)
(4, 'Do homework', 1)

如果您能解释__str__为什么没有按照我的意愿工作,我们将不胜感激!

您返回的是.fetchall(),而不是新的类实例,因此您可以破解它以打印它:

class Task:
def __init__(self, taskID, description, completed):
self.taskID = taskID
self.description = description
self.completed = completed
def __str__(self):
print(self.description + " DONE!")

并使其他类像

def readDatabase():
query = '''SELECT * FROM Task'''
c.execute(query)
tasks = c.fetchall()
for task in tasks:
tlo.Task(task[0], task[1], task[2])

像一样呼叫

readDatabase()

最新更新