Как я могу добавить атрибуты в производный класс? - PullRequest
0 голосов
/ 23 апреля 2020
class Human():
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def hablar(self, message):
        print(message)


class Alien(Human):
    def __init__(self, planet):
        self.planet = planet

    def fly(self):
        print("I'm flying!")

Этот код является примером того, что я хочу сделать. Представьте, что я хочу, чтобы инопланетянин унаследовал все свойства Человека, но я также хочу, чтобы у него был атрибут pl anet, чтобы отличать guish от того, из чего происходит pl anet.

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

Спасибо!

Ответы [ 3 ]

1 голос
/ 23 апреля 2020

Вам нужно сослаться на конструктор родительского класса.

class Alien(Human):
    def __init__(self, name, age, planet):
        super().__init__(name, age)
        self.planet = planet
1 голос
/ 23 апреля 2020
class Human():
    def __init__(self, name, age):
        self.name = name 
        self.age = age

class Alien(Human):
    def __init__(self, planet, **kwargs):
        self.planet = planet
        super(Alien, self).__init__(**kwargs)


Z = Alien(planet='Venus',name='Z',age=21)
print(Z.__dict__)

вывод:

{'planet': 'Venus', 'name': 'Z', 'age': 21}
1 голос
/ 23 апреля 2020

Возможно, вы захотите обратиться к этому вопросу о вызове конструктора родительского класса из дочернего класса.

Вам необходимо использовать метод dunder __init__ родительского класса внутри __init__ из Alien как так:

class Human():
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def hablar(self, message):
        print(str(message))


class Alien(Human):

    def __init__(self, name, age, planet):
        super().__init__(name, age)
        self.planet = planet

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