为什么我不能连接这些?

时间:2014-02-22 22:48:15

标签: python python-2.7

 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上关注这个教程,我一遍又一遍地看着它,我很确定我的代码格式正确并且与教程相匹配。也许我只是错过了一些明显的东西,真的很欣赏这一双眼睛。

2 个答案:

答案 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...>