Python打印对象-TypeError:必须是str,而不是Address
我有Python打印对象-TypeError:必须是str,而不是Address,python,console,Python,Console,我有Person和Address课程。每个人都有一个地址 代码: 但是,当我调用print(p)时,p是Person,我得到以下异常: File "phone2.7.py", line 30, in __str__ return "Name: " + self.name + "\n" + "Age: " + self.age + "\n" + "Phone: " + self.phone + "\n" + "Address: " + self.address TypeError:
Person
和Address
课程。每个人
都有一个地址
代码:
但是,当我调用print(p)
时,p
是Person
,我得到以下异常:
File "phone2.7.py", line 30, in __str__
return "Name: " + self.name + "\n" + "Age: " + self.age + "\n" + "Phone: " + self.phone + "\n" + "Address: " + self.address
TypeError: must be str, not Address
有人能指出问题所在吗?谢谢。您正在尝试添加
字符串
和对象
。在Address
类中重写\uu str\uu
方法是不够的。您需要调用str()
方法
"Address: " + str(self.address)
p=人(1,2,3,4)
打印p在使用
+
连接之前,必须使用str()
函数将self.address
对象转换为字符串
class Person:
def __str__(self):
return "Name: " + self.name + "\n" + "Age: " + self.age + "\n" + "Phone: " + self.phone + "\n" + "Address: " + str(self.address)
你应该解释你的答案,而不仅仅是张贴代码。我会从下次开始处理。。感谢您的建议@andy GCan有人详细说明为什么需要显式调用str()吗?(对象是在字符串上下文中引用的,所以为什么不使用
\uuuu str\uuuu
?)最好在连接之前将所有字段转换为字符串,这样当有人将整数值传递给Age/Phone时就不会出错number@AndyG只有在打印对象或在该对象上调用str()时,才会调用str,基本上,它是一种特殊的方法,用于将对象转换为字符串,并且当您尝试连接时不会自动调用它,来自Java世界,我的默认期望是\uuu str\uu
将被隐式调用。在这种情况下,重要的是要记住Python是一种语言。
class Address:
def __init__(self, street, town, city, postcode, country):
self.street = street
self.town = town
self.city = city
self.postcode = postcode
self.country = country
def __str__(self):
return ("\t" + "Street: " + self.street +
"\n\t" + "Town: " + self.town +
"\n\t" + "City: " + self.city +
"\n\t" + "Postcode: " + self.postcode +
"\n\t" + "Country:" + self.country)
class Person:
def __init__(self, name, age, phone, address):
# instance variables, unique to each Person
self.name = name
self.age = age
self.phone = phone
self.address = address
def __str__(self):
return "Name: " + str(self.name) + "\n" + "Age: " + str(self.age) + "\n" + "Phone: " + str(self.phone) + "\n" + "Address: " + str(self.address)
class Person:
def __str__(self):
return "Name: " + self.name + "\n" + "Age: " + self.age + "\n" + "Phone: " + self.phone + "\n" + "Address: " + str(self.address)