I'm trying to get an idea of has-many relationship in python classes, although theoretically I understood the concept but when I try to implement it, I'm not getting correct output:
Code:
## Animal is-a object
class Animal(object):
def sound(str):
print("sound of animals")
## Dog is-a Animal, Dag has a name
class Dog(Animal):
"""docstring for Dog."""
def __init__(self, name):
#super(Dog, self).__init__()
#initializing dog name
self.name = name
def sound(str):
print("Dog barks")
## Cat is-a animal, Cat also has a name
class Cat(Animal):
"""docstring for Cat."""
def __init__(self, name):
# initializing cat name
self.name = name
def sound(str):
print("Cat meows")
## Person has-a pet of some kind
## Person is-a object
class Person(object):
"""docstring for Person."""
def __init__(self, name):
#super(Person, self).__init__()
self.name = name
## Person has-a pet of some kind
self.pet = None
## rover is-a dog
rover = Dog("Rover")
rover.sound()
## Satan is-a cat
satan = Cat("Satan")
tiger = Cat("tiger")
satan.sound()
## Mary is-a Person
Mary = Person("Mary")
Mary.pets = [satan ,tiger , rover ] # list of pets
Mary.pets ={'cats' : [satan, tiger] , 'dogs': [rover]} #dictionary of lists of pets
print("No. of pets mary has ")
for x,y in Mary.pets.items():
print(x, ":" , y)
Is this correct syntax for getting all dictionary values from a object:
for x,y in Mary.pets.items():
print(x, ":" , y)
I'm getting this output:
Dog barks
Cat meows
No of pets mary has
cats : [<__main__.Cat object at 0x011F0D30>, <__main__.Cat object at 0x011F0CF0>]
dogs : [<__main__.Dog object at 0x011F0CD0>]
Why am i getting address rather than value?
See below
The name property is kept on the base class. The base class implements repr as well
## Animal is-a object
class Animal(object):
def __init__(self,name):
self.name = name
def sound(str):
print("sound of animals")
def __repr__(self):
return self.name
## Dog is-a Animal, Dag has a name
class Dog(Animal):
"""docstring for Dog."""
def __init__(self, name):
super(Dog, self).__init__(name)
def sound(str):
print("Dog barks")
## Cat is-a animal, Cat also has a name
class Cat(Animal):
"""docstring for Cat."""
def __init__(self, name):
super(Cat, self).__init__(name)
def sound(str):
print("Cat meows")
## Person has-a pet of some kind
## Person is-a object
class Person(object):
"""docstring for Person."""
def __init__(self, name):
#super(Person, self).__init__()
self.name = name
## Person has-a pet of some kind
self.pet = None
## rover is-a dog
rover = Dog("Rover")
rover.sound()
## Satan is-a cat
satan = Cat("Satan")
tiger = Cat("tiger")
satan.sound()
## Mary is-a Person
Mary = Person("Mary")
Mary.pets = [satan ,tiger , rover ] # list of pets
Mary.pets ={'cats' : [satan, tiger] , 'dogs': [rover]} #dictionary of lists of pets
print("No. of pets mary has ")
for x,y in Mary.pets.items():
print(x, ":" , y)
output
Dog barks
Cat meows
No. of pets mary has
('cats', ':', [Satan, tiger])
('dogs', ':', [Rover])