2015-10-31 4 views
1

Я новичок в python и просто пытаюсь проверить синтаксис и узнать его. Код ниже работает отлично, за исключением случаев, когда я получаю наследование. Последняя команда «toString» не работает, и я не могу понять, почему.Python Inheritance - Instance не имеет атрибута

Я уверен, что я не делаю что-то наиболее эффективным способом, но даже если есть более эффективный способ, я сначала хотел бы понять, почему то, что я делаю, неверно. большое спасибо. Пожалуйста, дайте мне знать, если мне нужно уточнить что-нибудь

#!/bin/python 

class Animal: 


     __name = "" 
     __height = 0 
     __weight = 0 
     __sound = 0 

     def __init__(self, name, height, weight, sound): 
       self.__name = name 
       self.__height = height 
       self.__weight = weight 
       self.__sound = sound 

     def set_name(self,name): 
       self.__name = name 

     def get_name(self): 
       return self.__name 


     def set_height(self,height): 
       self.__height = height 

     def get_height(self): 
       return self.__heiight 

     def set_weight(self,weight): 
       self.__weight=weight 

     def get_weight(self): 
       return self.__weight 

     def set_sound(self,sound): 
       self.__sound = sound 

     def get_sound(self): 
       return self.__sound 

     def get_type(self): 
       print("Animal") 

     def toString(self): 
       return("{} is {} inches tall, {} lbs, and says {}".format(self.__name, self.__height,self.__weight,self.__sound)) 



objCat = Animal('Whiskers', 33, 10, 'Meow') 
print (objCat.toString()) 


# Attempt Inheritance 

class cDog(Animal): 

     __owner="" 

     def __init__(self,name,height,weight,sound,owner): 
       self.__owner=owner 
       Animal.__init__(self,name,height,weight,sound) 

     def __str__(self): 
       return ("{}".format(self.__height)) 

     def set_owner(self,owner): 
       self.__owner=owner 

     def get_owner(self): 
       return self.__owner 

     def get_type(self): 
       print("Dog") 

     def toString(self): 
       return ("{} is {} inches tall, {} lbs, says {}, and is owned by, {}".format(self.__name,self.__height,self.__weight,self.__sound,self.__owner)) 


objDog = cDog('Brewsky', 20, 75, 'Ruff', 'Jared') 
print (objDog.toString()) 
+0

JFYI Этот пример кода из Derek Banas [Учебник по Python] (https://youtu.be/N4mEzFDjqtA?t=2056). Для тех, кто заинтересован в изучении Python или получении полного контекста. – soliosg

ответ

2

В вашем Animal классе, двойное подчеркивание перед именем атрибутов сделал их (вроде) частные.

Просто удалите двойное подчеркивание (или измените его на одно подчеркивание, если вы хотите сохранить слабый индикатор), и он будет исправлен. См. this вопрос для получения дополнительной информации.