Как правильно решить упражнение из книги Эрик Мэтиз "Изучаем 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']