I'm just starting out with Python, but I cannot figure out why I'm having a problem with such simple class inheritance, and despite the common use of the tutorial I've been following, I haven't seen anyone else on Stack Overflow encountering this issue. Here's the code (don't worry, nothing too complicated):
import random import sys import os 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 toString(self): return "{} is {} cm tall and {} kilograms and says {}".format(self.__name, self.__height, self.__weight, self.__sound) cat = Animal ('Whiskers', 33, 10, 'meow') print(cat.toString()) bird = Animal ('Flutie', 33, 10, 'tweet') print(bird.toString()) class Dog(Animal): def __init__(self, name, height, weight, sound): super(Dog, self).__init__(name, height, weight, sound) def toString(self): return "{} is {} cm tall and {} kilograms and says {}".format(self.__name, self.__height, self.__weight, self.__sound) spot = Dog ('Spot', 53, 27, "Woof") print(spot.toString()) ...And here's the output:
Whiskers is 33 cm tall and 10 kilograms and says meow Flutie is 33 cm tall and 10 kilograms and says tweet Traceback (most recent call last): File "C:/.../animal_test.py", line 72, in <module> print(spot.toString()) File "C:/.../animal_test.py", line 65, in toString return "{} is {} cm tall and {} kilograms and says {}".format(self.__name, AttributeError: 'Dog' object has no attribute '_Dog__name'
__name = ''etc. at the class level probably doesn't do what you think, serves no purpose here, and is likely to lead to problems later.__name = ""This almost certainly isn't doing what you think it is doing. Don't write atoStringmethod, use__str__.if (something is something):. They use errant semi-colons ending lines. And the example of the class definition is totally non-pythonic because of the things I mentioned above. He also teaches you to write getters and setters, which is not the you do encapsulation in Python. They are probably coming from either Java/C++ . Get a better Python tutorial if you want to learn Python.