class User:
def __init__(self, name, age, country, title, ph):
self.name = name
self.age = age
self.country = country
self.title = title
self.ph = ph
class Programmer(User):
def __init__(self, address):
self.address=address
def do_something(self):
print self.name
print self.age
print self.title
print self.country + " " + self.ph
brian = User("brian", "28", "US", "Mr", "123556")
diana = Programmer("newark", brian)
diana.do_something()
Ошибка:
Traceback (most recent call last):
File "C:/Users/esurega/Desktop/NPI_TA/enm2enm/test/test.py", line 24, in <module>
diana = Programmer("newark", brian)
TypeError: __init__() takes exactly 2 arguments (3 given)
Класс Programmer
не инициализирует любые атрибуты его родительского класса в методе __init__
даже если он наследует User
.
Вы можете либо Programmer.__init__
инициализировать родительский класс вместо объекта User
:
class Programmer(User):
def __init__(self, address, user):
super(Programmer, self).__init__(user.name, user.age, user.country, user.title, user.ph)
self.address=address
или просто сделать user
атрибут в Programmer
ссылаться на User
он основан, вместо того, чтобы наследовать класс Programmer
User
:
class Programmer:
def __init__(self, address, user):
self.user = user
self.address = address
def do_something(self):
print self.user.name
print self.user.age
print self.user.title
print self.user.country + " " + self.user.ph
Programmer
, а вы передаете два. Первый аргументself
в__init__()
просто представляет сам экземпляр.classmethod
который беретUser
иaddress
и возвращаетProgrammer
. Вам также следует переписатьProgrammer.__init__
чтобы взять все аргументы, которые используетUser.__init__
, и передать их родительскому методу сsuper.__init__( name, age, country, title, ph)