TypeError: __init__() missing 1 required positional argument: 'privileges'

Aleks

Новичок
Пользователь
Дек 31, 2021
2
0
1
Windows 10
Python 3.9.5
Здравствуйте. Помогите пожалуйста, совсем отчаялся, третьи сутки ломаю голову, не пойму что я делаю не так?
Задание:
Создать отдельный класс Privileges. Он должен иметь один атрибут, privileges, в котором хранится список строк. Перенести из класса Admin, метод show_privileges() в класс Privileges. Сделать экземпляр Privileges атрибутом класса Admin. Создать новый экземпляр Admin и вызвать наш метод, чтобы показать преимущества, которыми наделены администраторы.
Моё решение:(

Код:
class User:
    def __init__(self, first_name, last_name, age, city):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age
        self.city = city
        self.login_attempts = 0
   
    def describe_user(self):
        print(f'Привет юзер - {self.first_name.title()} {self.last_name.title()},'
              f' ваш возраст {self.age} года, город проживания {self.city.title()}.')
   
    # увеличение попыток авторизации
    def increment_login_attempts(self):
        self.login_attempts += 1
        print(f'Попыток авторизации - {self.login_attempts}')
       
    # обнулить попытки авторизации
    def reset_login_attempts(self):
        self.login_attempts = 0
        print(f'Сброс авторизации на {self.login_attempts}')
       
    def result(self):
        print(f'Всего попыток: {self.login_attempts}')

class Admin(User):
    def __init__(self, first_name, last_name, age, city):
        super().__init__(first_name, last_name, age, city)
        self.privileg = Privileges()
       
   
    # показать привилегии  
#    def show_privileges(self):
#        print (f"Администратор может: ", self.privileges)
   
    # переопределение метода родительского класса User  
    def describe_user(self):
        print(f'Должность - Администратор, Имя: {self.first_name.title()} {self.last_name.title()},'
              f' возраст {self.age} года, город {self.city.title()}.')

class Privileges:
    def __init__(self, privileges):
#        self.privileges = privileges
        self.privileges = "\n\tсоздать запись, \n\tудалить запись, \n\tзаблокировать запись."
   
    def show_privileges(self):
        print (f"Администратор может: {self.privileges}")
       
usr = User('Василий', 'Пупкин', 38, 'Днепр')
usr.describe_user()      
adm = Admin('Алекс', 'Мёрфи', 43, 'Днепр')
adm.describe_user()
adm.privileg.show_privileges()
 
Последнее редактирование:

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
TypeError: __init__() missing 1 required positional argument: 'privileges'
Ошибка возникает потому, что в конструкторе класса Privileges у вас указан аргумент privileges, но вы его в коде не передаете.
Чтобы исправить можно убрать аргумент из конструктора класса (в задании он не требуется):
Python:
class Privileges:
    def __init__(self):
        # атрибут self.privileges по заданию - это список строк
        self.privileges = ["\n\tсоздать запись", "\n\tудалить запись", "\n\tзаблокировать запись."]
  
    def show_privileges(self):
        print (f"Администратор может: {''.join(self.privileges)}")
 
  • Мне нравится
Реакции: Aleks

Aleks

Новичок
Пользователь
Дек 31, 2021
2
0
1
Ошибка возникает потому, что в конструкторе класса Privileges у вас указан аргумент privileges, но вы его в коде не передаете.
Чтобы исправить можно убрать аргумент из конструктора класса (в задании он не требуется):
Python:
class Privileges:
    def __init__(self):
        # атрибут self.privileges по заданию - это список строк
        self.privileges = ["\n\tсоздать запись", "\n\tудалить запись", "\n\tзаблокировать запись."]
 
    def show_privileges(self):
        print (f"Администратор может: {''.join(self.privileges)}")

Огромное вам спасибо! Разобрался.
 

Форум IT Специалистов