gpt4 book ai didi

Python 类/对象 __str__ 和其他问题

转载 作者:行者123 更新时间:2023-12-01 01:24:21 25 4
gpt4 key购买 nike

我对 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

我不确定我是否需要设置和/或获取名称方法,因为我必须存储和显示的三个对象是预先确定的(没有用户输入或任何内容)。上述代码保存在名为 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__ 方法本身

def __str__(self):
return 'Name: ',self.__name,'\n','ID Number: ',str(self.__id),'\n','Department: ',self.__dept,'\n','Job Title: ',self.__title

"TypeError: __str__ returned non-string (type tuple)"

此错误通知您

'Name: ',self.__name,'\n','ID Number: ',str(self.__id),'\n','Department: ',self.__dept,'\n','Job Title: ',self.__title

是一个元组。 (这是隐式从逗号分隔符号构造的。)但是,Python 期望 str 作为返回类型。更改您的 return 语句,使其返回一个字符串。您可以使用

return ''.join(['Name: ',self.__name,'\n','ID Number: ',str(self.__id),'\n','Department: ',self.__dept,'\n','Job Title: ',self.__title])

return 'Name: {}\nID Number: {}\nDepartment: {}\nJob Title: {}'.format(self.__name, self.__id, self.__dept, self.__title)

任何东西,只要它返回一个字符串。

<小时/>

编辑:对所提供解决方案的说明

第一个解决方案使用 .join() 方法,该方法遵循以下格式

<str_to_connect>.join(<iterable_of_str>)

使用的方括号['Name: ',self.__name, ... self.__title]会将所有各种字符串参数打包到列表。将此列表传递给 .join() 将其全部连接到一个 str 中。

第二个解决方案使用遵循此格式的 .format() 方法

<str_to_format>.format(<args>...)

您可以将复杂的格式传递到 .format() 函数中,但它们通常使用 {} 占位符,然后用参数的输入填充该占位符通过了。

最重要的是,这两个都会返回 str 类型

进一步阅读:str.join() , PyFormat .

注意:C. Kim 在评论中使用 % 的解决方案也同样有效。

关于Python 类/对象 __str__ 和其他问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53491545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com