Когда я запускаю этот код, я не могу получить номер ноги, вместо этого я получил "". Но я должен получить 4. В чем причина. Что мне делать? - PullRequest
0 голосов
/ 02 октября 2019
class animal():
    def __init__(self,leg_number=4,cell_number="multicellular",feeding="grass"):
        self.leg_number= leg_number
        self.cell_number= cell_number
        self.feeding= feeding
class dog(animal):

    def __init__(self,leg_number=4,cell_number="multicellular",feeding="meat"):
        super().__init__(leg_number,cell_number)
        self.feeding= feeding
        print( "this dog has  leg number: {}\ncell type: {}\nfeeding type {}".format(self.leg_number,self.cell_number,self.feeding))

a = dog(animal)

Когда я запускаю этот код, я не могу получить номер ноги, вместо этого я получил "". Но я должен получить 4. В чем причина. Что мне делать?

Ответы [ 2 ]

0 голосов
/ 02 октября 2019

Не передавайте animal dog, когда вы создаете, а экземпляр просто делает a = dog (). Собака наследует от животного, это не значит, что вы должны пройти егоПередайте только то, что вы хотите передать своему конструктору (то есть __init__).

То, что делал ваш код, печатало сам объект класса: print(animal).

Итак:

class animal():
    def __init__(self,leg_number=4,cell_number="multicellular",feeding="grass"):
        self.leg_number= leg_number
        self.cell_number= cell_number
        self.feeding= feeding
class dog(animal):

    def __init__(self,leg_number=4,cell_number="multicellular",feeding="meat"):
        super().__init__(leg_number,cell_number)
        self.feeding= feeding
        print( "this dog has  leg number: {}\ncell type: {}\nfeeding type {}".format(self.leg_number,self.cell_number,self.feeding))

a = dog()

Хотя я бы рекомендовал более чистый подход:

class animal():
    def __init__(self, leg_number ,cell_number, feeding):
        self.leg_number = leg_number
        self.cell_number = cell_number
        self.feeding = feeding
    def __str__(self):
        return f"This {self.__class__.__name__} has {self.leg_number} legs, {self.cell_number} cell type, and feeds on {self.feeding}."
class dog(animal):
    def __init__(self):
        super().__init__(4, "multicellular", "meat")
    def bark(self):
        print("Woof")

a = dog()
print(a)
a.bark()

Вывод:

This dog has 4 legs, multicellular cell type, and feeds on meat.
Woof
0 голосов
/ 02 октября 2019

Я не эксперт, но вы форматируете leg_number для вывода.

У животного 4 ноги, но у собаки установлен номер ноги "asd", вы хотели это сделать?

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