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)