【发布时间】:2019-04-28 17:08:07
【问题描述】:
我仍然对 Python 非常陌生,并且正在为应该是一个简单的任务而苦苦挣扎。我必须为“Employee”类编写代码,保存模块,将模块导入另一个 .py 文件,然后存储并显示该类的 3 个对象。我不断收到一个
"TypeError: __str__ returned non-string (type tuple)"
无论我如何修改代码,它都让我发疯。任何我做错的事情,请向我解释它是如何/为什么错的,学习这对我来说非常重要! 下面是Employee类的代码:
class Employee:
def __init__(self,name,id,dept,title):
self.__name = name
self.__id = id
self.__dept = dept
self.__title = title
def set_name(self,name):
self.__name = name
def set_id(self,id):
self.__id = id
def set_dept(self,dept):
self.__dept = dept
def set_title(self,title):
self.__title = title
def get_name(self):
return self.__name
def get_id(self):
return self.__id
def get_dept(self):
return self.__dept
def get_title(self):
return self.__title
def __str__(self):
return 'Name: ',self.__name,'\n','ID Number: ',str(self.__id),'\n','Department: ',self.__dept,'\n','Job Title: ',self.__title
我不确定我是否需要 set 和/或 get name 方法,因为我必须存储和显示的三个对象是预先确定的(没有用户输入或任何东西)。上述代码保存在名为 emp.py 的文件中。以下代码是我认为问题所在,但作为新手我不确定。
import emp
def main():
name = 'Susan Meyers'
id = '47899'
dept = 'Accounting'
title = 'Vice President'
employee1 = emp.Employee(name,id,dept,title)
name = 'Mark Jones'
id = '39119'
dept = 'IT'
title = 'Programmer'
employee2 = emp.Employee(name,id,dept,title)
name = 'Joy Rogers'
id = '81774'
dept = 'Manufacturing'
title = 'Engineer'
employee3 = emp.Employee(name,id,dept,title)
print('Employee 1:')
print(employee1)
print('Employee 2:')
print(employee2)
print('Employee 3: ')
print(employee3)
main()
我已经通过创建一个对象(即 susan = emp.Employee['Susan',id number,'dept','title'] 来尝试此操作,其中包含 id、dept、title 所在的适当信息,但仍然得到元组错误。我做错了什么?我考虑将信息存储在列表或字典中,但认为我应该坚持基本的基础知识。我觉得很愚蠢,我整天都在做这个!对于任何和所有帮助,在此先感谢。
编辑:修复了缩进错误(在我的 pycharm 代码中不存在,但在此处复制并粘贴它们而无需进行适当的校对...) 进一步编辑: 运行时,我需要它说:
Employee 1:
Name: Susan Meyers
ID Number: 47899
Department: Accounting
Title: Vice President
Employee 2:
Name: Mark Jones
ID Number: 39119
Department: IT
Title: Programmer
Employee 3:
Name: Joy Rogers
ID Number: 81774
Department: Manufacturing
Title: Engineer
**这就是程序的结尾,就像我说的那样,应该是真的基本的东西,如果这是一个列表或其他东西,我可以将它淘汰np......但是每个员工必须存储为 Employee 类的对象。我们刚刚涵盖了一个非常长的关于类和对象的章节(当我患流感时),所以我的回忆/方法可能不是最好的。
【问题讨论】:
-
您也可以发布您想要的输出吗?现在,当
__str__必须返回字符串时,您的__str__确实返回元组("Name", "Susan Meyers", ...)。像这样更改__str__的返回不会导致任何问题,因为它返回 single 字符串:return "Name: %s\nID Number: %s\nDepartment %s\nJob Title: %s" % (self.__name, self.__id, self.__dept, self.__title) -
在 Python 中你不需要 getter 和 setter,但是如果你的教授告诉你,你还是要写它们
标签: python python-3.x oop object