The question is in the comments of this code
class Dog: kennel = 0 def __init__(self, breed): self.breed = breed Dog.kennel += 1 def __str__(self): return self.breed + " says: Woof!"class SheepDog(Dog): def __str__(self): return super().__str__() + " Don't run away, Little Lamb!"class LowlandDog(SheepDog): def __str__(self): return Dog.__str__(self) + " I don't like mountains!"# Used here Dog class Why add self, Other images super().__str__() No need to add ?class GuardDog(Dog): def __str__(self): return super().__str__() + " Stay where you are, Mister Intruder!"rocky = LowlandDog("Collie")luna = GuardDog("Dobermann")print(rocky.kennel) # there ouput yes 2, But I think it's 1, It's a little confusing ?print(rocky)