class Pet:
def __init__(self, name, age):
self.name = name
self.age = age
def talk(self):
raise NotImplementedError("Subclass must implement abstract method")
class Cat(Pet):
def __init__(self, name, age):
Pet.__init__(self, name, age)
def talk(self):
return "Meowww"
class Dog(Pet):
def __init__(self, name, age):
Pet.__init__(self, name, age)
def talk(self):
return "Woof"
def main ():
pets = [Cat("Jess",3),Dog("Riker",2),Cat("Fred",7),Pet("thePet",5)]
for pet in pets:
print "Name: " + pet.name + "Age: " + str(pet.age) + ", says: " + pet.talk
print jess.name
if __name__ == "__main__":
main()
Traceback (most recent call last):
File "pets.py", line 36, in <module
main()
File "pets.py", line 31, in main
print "Name: " + pet.name + "Age: " + str(pet.age) + ", says: " + pet.talk
TypeError: cannot concatenate 'str' and 'instancemethod' objects
好吧,我希望粘贴正确。我知道我需要将int类型转换为str,但我不知道为什么它不能与“instancemethod”连接。我搜索了大多数其他帖子处理将int转换为str或任何简单的格式错误。我在Youtube上关注这个教程,我一遍又一遍地看着它,我很确定我的代码格式正确并且与教程相匹配。也许我只是错过了一些明显的东西,真的很欣赏这一双眼睛。
答案 0 :(得分:3)
您必须将其与该方法的结果(返回值)连接起来。你怎么得到这个结果?您必须调用传递(...)
内的参数的方法。例如:
print "Name: " + ... + pet.talk()
答案 1 :(得分:1)
要添加到Christian的答案中,这里是您正在获得的错误的简要说明:
在Python中,一切都是对象。特别是,函数是对象。当你看到TypeError: cannot concatenate 'str' and 'instancemethod' objects
时,Python所说的是你试图连接一个字符串和一个方法(函数),这显然没有意义。问题只是您在()
的末尾遗漏了pet.talk
。调用引用函数本身的函数之间的区别。例如,在Python解释器中尝试这个:
>>>def talk():
print('Hi!')
>>>talk()
Hi!
>>>talk
<function talk at 0x00...>