2014-02-22 140 views
1
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,但我不知道爲什麼它不能與「實例方法」連接。我搜索了周圍和大多數其他帖子處理轉換int str或任何簡單的格式錯誤。我在Youtube上關注這個教程,我一遍又一遍地看了一遍,我很確定我的代碼格式正確,並且與教程相匹配。也許我只是錯過了一些顯而易見的東西,真的會很欣賞這一款的另一雙眼睛。爲什麼我不能連接這些?

回答

3

您必須將它與該方法的結果(返回的值)連接起來。你如何得到這個結果?您必須調用傳遞(...)中參數的方法。例如:

print "Name: " + ... + pet.talk() 
+0

謝謝,看來我的眼睛再次欺騙了我。 – user3341951

1

爲了增加基督教的回答,這裏就是你得到錯誤的簡要說明:

在Python中,一切都是對象。特別是,功能是對象。當你看到TypeError: cannot concatenate 'str' and 'instancemethod' objects時,Python所說的是你試圖連接一個字符串和一個方法(函數),這顯然沒有意義。問題很簡單,你在pet.talk的末尾缺少()。調用引用該函數本身的函數是不同的。例如,在Python解釋器中試試這個:

>>>def talk(): 
    print('Hi!') 
>>>talk() 
Hi! 
>>>talk 
<function talk at 0x00...> 
相關問題