Как я могу реализовать метод для печати объекта в суперклассе? - PullRequest
0 голосов
/ 08 марта 2019

Когда я запускаю это, я получаю желаемую строку, соответствующую объекту вида, который создается.Моя цель заключается в том, чтобы иметь возможность создать метод под названием говорящий в классе Animal, который достигает того же самого.Но я не очень хорошо понимаю, как это сделать.

class Animal(object):

    def __init__(self):
        pass

    def speak():
        pass

class Mammal(Animal):

    def __init__(self):
        Animal.__init__(self)

class Cat(Mammal):

    def __init__(self):
        Mammal.__init__(self)

    def __str__(self):
        return "meeeow"

class Dog(Mammal):

    def __init__(self):
        Mammal.__init__(self)

    def __str__(self):
        return "wooof"

class Primate(Mammal):

    def __init__(self):
        Mammal.__init__(self)

class Hacker(Primate):

    def __init__(self):
        Primate.__init__(self)

    def __str__(self):
        return "Hello world!"

garfield = Cat()
print(garfield)

spike = Dog()
print(spike)

john = Hacker()
print(john)

Ответы [ 2 ]

1 голос
/ 08 марта 2019

Ваши наследуемые классы могут обращаться к любому методу, определенному в родительском классе.Поэтому для достижения этого просто определите новый метод с именем speak в Animal классе и print, как вы делали в своих примерах:

class Animal(object):

    def __init__(self):
        print(self)
        pass

    def speak(self):
        print(self)

Затем просто создайте экземпляр и вызовите функцию:

garfield = Cat()
garfield.speak()

Выход

meeeow
1 голос
/ 08 марта 2019

Измените свой класс животных, как показано ниже. Когда вы вызываете метод super из своего подкласса, вы передаете экземпляр класса, который вы создали, родительской функции init. Таким образом, экземпляр класса передается в функцию init Mammal, которая вызывает super и передает экземпляр в функцию init Animal.

class Animal(object):

    def __init__(self):
        self.speak()

    def speak(self):
        print(self)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...