помогите с наследованием python3
Как инициализировать родительский класс, передавая в подкласс атрибуты?
class Game:
def __init__(self, id, username):
self.id = id
self.username = username
def create_game(self):
pass
class G1(Game):
def __init__(self, numbers_of_winners):
super().__init__(self.id, self.username)
self.numbers_of_winners = numbers_of_winners
class G2(Game):
def __init__(self, numbers_of_winners):
super().__init__(self.id, self.usernam)
self.numbers_of_winners = numbers_of_winners
g1 = G1(4)
g2 = G2(3)
Ответы (2 шт):
Передавайте параметры родительского класса в подклассы.
class G1(Game):
def __init__(self, id, username, numbers_of_winners):
super().__init__(id, username)
self.numbers_of_winners = numbers_of_winners
Давайте по порядку:
class Game:
def __init__(self, id, username):
self.id = id
self.username = username
Класс Game ждёт 2 аргумента для инициализации. self.id и self.username в экземпляре класса появляются после инициализации.
class G1(Game):
def __init__(self, numbers_of_winners):
super().__init__(self.id, self.username)
self.numbers_of_winners = numbers_of_winners
Класс-наследник G1 для инициализации ждёт 1 аргумент. Затем он пытается вызвать инициализацию родителя со значениями self.id и self.username, которые появляются после того, как инициализирован класс Game. Т.е., на момент вызова super().__init__ у экземпляра нет атрибутов self.id и self.username, которые Вы пытаетесь передать.
Аналогично с классом G2.
g1 = G1(4)
g2 = G2(3)
Непонятно, что Вы тут хотели сделать. Класс Game (родитель) ожидает id и username, а в класс-потомок Вы передаёте какой-то один аргумент. Откуда тогда класс-родитель должен взять нужные ему id и username?
Один из путей решения: воспользоваться ответом @ioprst. Т.е. при инициализации наследников передавать им и id, и username и numbers_of_winners.