использовать атрибуты экземпляра в другом классе Python

1
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)
  • 1
    Из вашего кода вам нужно передать только один аргумент, когда вы инициализируете свой экземпляр Programmer , а вы передаете два. Первый аргумент self в __init__() просто представляет сам экземпляр.
  • 0
    Вы бы написали classmethod который берет User и address и возвращает Programmer . Вам также следует переписать Programmer.__init__ чтобы взять все аргументы, которые использует User.__init__ , и передать их родительскому методу с super.__init__( name, age, country, title, ph)
Показать ещё 6 комментариев
Теги:

1 ответ

0
Лучший ответ

Класс 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню