Как правильно решить упражнение из книги Эрик Мэтиз "Изучаем Python" по классам 9.8 "Привилегии":

Описание задания: "Привилегии: напишите класс Privileges. Класс должен содержать всего один атрибут privileges со списком строк из упражнения 9-7. Переместите метод show_privileges() в этот класс. Создайте экземпляр Privileges как атрибут класса Admin. Создайте новый экземпляр Admin и используйте свой метод для вывода списка привилегий." Мой код::

# 9.7 Администратор
class User():
    """Простая модель пользователя."""
    def __init__(self,first_name,last_name,age,sex):
        """Инициализирует атрибуты first_name,last_name,age,sex."""
        self.first_name = first_name
        self.last_name = last_name
        self.age = age
        self.sex = sex

    def describe_user(self):
        """Выводит сводку с информацией о пользователе."""
        print(self.first_name,self.last_name,self.age,self.sex)
    def greet_user(self):
        """Выводит персональное приветствие для пользователя."""
        print(f"Hi,{self.first_name}!")

user = User('Alla','Turenko', 32, 'woman')

print(f"User name is {user.first_name}.")
print(f"\nUser last name is {user.last_name}.")
print(f"\nUser age is {user.age}.")
print(f"\nUser sex is {user.sex}.")

user.describe_user()
user.greet_user()

class Admin(User):
    """Представляет аспекты, присущие классу пользователь."""
    def __init__(self,first_name,last_name,age,sex):
        """Инициализирует атрибуты класса-родителя.
        Затем инициализирует атрибуты,специфические для администратора."""
        super().__init__(first_name,last_name,age,sex)
        self.privileges = [ 'allowed to add messages', 'allowed to delete users', 'allowed to ban users']   
    def show_privileges(self):
        """Выводит список привилегий администратора."""
        print(f"Admin has a {self.privileges}")
Admin =  Admin('Alla','Turenko', 32, 'woman')
Admin.describe_user()
Admin.show_privileges()

# 9.8 Привилегии

class Privileges():
    """Модель привилегий."""
    def __init__(self,privileges):
        """Инициализирует атрибуты класса."""
        self.privileges = [ 'allowed to add messages', 'allowed to delete users', 'allowed to ban users']
    def show_privileges(self):
        """Выводит список привилегий администратора."""
        print(f"Admin has a {self.privileges}")
class Admin(User):
    """Представляет аспекты, присущие классу пользователь."""
    def __init__(self,first_name,last_name,age,sex):
        """Инициализирует атрибуты класса-родителя.
        Затем инициализирует атрибуты,специфические для администратора."""
        super().__init__(first_name,last_name,age,sex)
        self.privileges = Privileges()   
    
user2 =  Admin('Max','Gribov', 28, 'man')
print(user2.describe_user())
user2.privileges.show_privileges()

Последний блок кода выдаёт ошибку:

User name is Alla.

User last name is Turenko.

User age is 32.

User sex is woman.
Alla Turenko 32 woman
Hi,Alla!
Alla Turenko 32 woman
Admin has a ['allowed to add messages', 'allowed to delete users', 'allowed to ban users']
Traceback (most recent call last):
  File "E:\Python\Книга\Глава 9\Киоск с мороженым.py", line 98, in <module>
    user2 =  Admin('Max','Gribov', 28, 'man')
  File "E:\Python\Книга\Глава 9\Киоск с мороженым.py", line 96, in __init__
    self.privileges = Privileges()
TypeError: __init__() missing 1 required positional argument: 'privileges'

В чём моя ошибка, не понимаю.(Пытаюсь учиться по книге второй месяц и пока вот так, не судите строго )


Ответы (1 шт):

Автор решения: Roman

Я сделал так (привожу твой пример):

class Privileges():
    def __init__(self):
    self.privileges = [ 'allowed to add messages', 'allowed to delete users', 'allowed to ban users']

А у тебя:

class Privileges(): 
    def init(self,privileges): 
    self.privileges = [ 'allowed to add messages', 'allowed to delete users', 'allowed to ban users']
→ Ссылка