#python
#питон
Вопрос:
У меня есть требование ниже, но я получаю некоторую ошибку:
Напишите отдельный класс привилегий. Класс должен иметь один атрибут, привилегии, который хранит список строк.Переместите метод show_privileges() в этот класс. Создайте экземпляр привилегий в качестве атрибута в классе Admin. Создайте новый экземпляр Admin и используйте свой метод, чтобы показать его привилегии.
class User:
def __init__(self, first_name, last_name):
"""Initiating attributes of user class"""
self.first_name = first_name
self.last_name = last_name
self.login_attempts = 1
def describe_user(self):
"""Print summary of the user info"""
print(f"User's info is {self.first_name} {self.last_name}")
def greet_user(self):
""" Method greets user"""
print(f"Goodday, {self.first_name} {self.last_name}!")
def increment_login_attempts(self, login):
"""Method increments login attempts"""
self.login_attempts = login
print(f"This user has {self.login_attempts} login attempts")
def reset_login_attempts(self):
"""Method resets login attempts"""
self.login_attempts = 0
class Privileges:
def __init__(self, privileges):
""" Shows admin privileges"""
self.privileges = privileges
def show_privileges(self):
"""Lists admin privileges"""
print(f"This user {','' '.join(self.privileges)}")
class Admin(User):
""" Represents Admin privileges of a user"""
def __init__(self, first_name, last_name, privileges):
super().__init__(first_name, last_name)
self.privileges = Privileges()
my_Admin_user = Admin('john', 'olode', ["Can Add Post", "Can Delete Post", "Can Ban User"])
my_Admin_user.describe_user()
my_Admin_user.greet_user()
my_Admin_user.Privileges.show_privileges()
Ошибка ниже
Traceback (most recent call last):
File "userPrivilegeClass.py", line 43, in <module>
my_Admin_user = Admin('john', 'olode', ["Can Add Post", "Can Delete Post", "Can Ban User"])
File "userPrivilegeClass.py", line 39, in __init__
self.privileges = Privileges()
TypeError: __init__() missing 1 required positional argument: 'privileges'
Был бы признателен за любую помощь.
К вашему сведению, я очень новичок в python (около месяца), пожалуйста, потерпите, пока вы не заглушите это для меня.. Спасибо
Ответ №1:
Privileges
принимает один аргумент ( priveleges
) при создании экземпляра. Вы не указали его в этой строке в своем Admin
классе:
self.privileges = Privileges()
Я подозреваю, что вы хотите изменить эту строку на:
self.privileges = Privileges(privileges)
Ответ №2:
Вы действительно закрываете единственное, чего вам не хватает, — это указать Permissions
reuqired position arg
...
class Admin(User):
""" Represents Admin privileges of a user"""
def __init__(self, first_name, last_name, privileges):
super().__init__(first_name, last_name)
self.privileges = Privileges(privileges) # Here we pass the privileges to the `__init__` method
...