Имеет много отношений в классах - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь получить представление о связи «есть-много» в классах Python, хотя теоретически я понял эту концепцию, но когда я пытаюсь ее реализовать, я не получаю правильный вывод:

Код:

## 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)

Это правильный синтаксис для получения всех значений словаря от объекта:

for x,y in Mary.pets.items(): 
    print(x, ":" , y)

Я получаю этот вывод:

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>]

Почему я получаю адрес, а не значение?

1 Ответ

0 голосов
/ 03 июня 2019

см. Ниже

Свойство name хранится в базовом классе. Базовый класс также реализует repr

## 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)

выход

Dog barks
Cat meows
No. of pets mary has 
('cats', ':', [Satan, tiger])
('dogs', ':', [Rover])
...