Форум сайта python.su
0
class Zombi(object): def __init__(self, a = 2, b = 3): self.a = a self.b = b print(a,b) class Alive(Zombi): c = 1 def __init__(self): super(Alive, self).__init__(a = Alive.c) class Gamer(Alive): d = 4 def __init__(self): super(Gamer, self).__init__(a = Gamer.d) Zombi() Alive() Gamer()
Отредактировано Karalov86 (Май 7, 2017 22:05:59)
Офлайн
221
Ну ок, пускай Alive умеет принимать аргумент “с”, вот чисто магически. Что с ним делать конструктору ?
Офлайн
0
JOHN_16Извиняюсь, аргумент должен быть c. Спешил, не заметил. Но всё равно та же ошибка. При вызове Gamer
кай Alive умеет принимать аргумент “с”, вот чисто магически. Что с ним делать конструктору ?
Офлайн
88
class Zombie(object): def __init__(self, **kwargs): a = kwargs.get('a', 2) b = kwargs.get('b', 3) self.a = a self.b = b print(a, b) class Alive(Zombie): c = 1 def __init__(self, **kwargs): kwargs['a'] = Alive.c # kwargs.setdefault('a', Alive.c) super(Alive, self).__init__(**kwargs) class Gamer(Alive): d = 4 def __init__(self, **kwargs): kwargs['a'] = Gamer.d super(Gamer, self).__init__(**kwargs) Zombie() Alive() Gamer()
Офлайн
0
А почему выходит ошибка:
__init__() got an unexpected keyword argument ‘a’
Аргумент а не передался что ли объекту Gamer? Если да то подскажите почему?
Офлайн
88
Внимательно следите за руками
class Class(object): def method(self, b=0, c=0): pass Class().method(b = 1) Class().method(c = 2) Class().method(a = 3)
Traceback (most recent call last):
File "C:/projects/tmp.py", line 8, in <module>
Class().method(a = 3)
TypeError: method() got an unexpected keyword argument 'a'
Офлайн
0
ShamanДа это мне понятно, я не понимаю как так получается, что def __init__(self):
Внимательно следите за руками
Офлайн
88
Хорошо. Попробуйте это
class Zombi(object): def __init__(self, y = 2, z = 3): self.a = y self.b = z print(y,z) class Alive(Zombi): c = 1 def __init__(self): super(Alive, self).__init__(y = Alive.c) class Gamer(Alive): d = 4 def __init__(self): super(Gamer, self).__init__(y = Gamer.d) Zombi() Alive() Gamer()
Офлайн