#python-3.x
#python-3.x
Вопрос:
Я просматриваю книгу «Ускоренный курс Python» Эрика Маттеса, и я застрял на 8-м «Попробуй сам» в главе 9
class Priviledges():
def __init__(self, priviledges):
self.priviledges2 = ['can add post', 'can delete post',
'can ban user', 'can unban user']
def show_priviledges(self):
for priviledge in self.priviledges:
print(priviledge)
class User():
def __init__(self, first_name, last_name, username, age):
self.first_name = first_name
self.last_name = last_name
self.username = username
self.age = age
def describe_user(self):
print(self.first_name.title())
print(self.last_name.title())
print(self.username)
print(self.age)
def greet_user(self):
print('Hello, ' self.first_name.title() ', how are you doing?')
class Admin(User):
def __init__(self, first_name, last_name, username, age):
super().__init__(first_name, last_name, username, age)
self.priviledges = Priviledges()
admin = Admin('1','1','1','1')
admin.priviledges.show_priviledges()
Пока я ввожу это, однако каждый раз, когда я его запускаю, я получаю одну и ту же ошибку
Traceback (most recent call last):
File "C:/Users/DedProtectr/Desktop/Chapter 9 Labs/Lab 9-8.py", line 35, in <module>
admin = Admin('1','1','1','1')
File "C:/Users/DedProtectr/Desktop/Chapter 9 Labs/Lab 9-8.py", line 33, in __init__
self.priviledges = Priviledges()
TypeError: __init__() missing 1 required positional argument: 'priviledges'
Может ли кто-нибудь помочь мне здесь? Что я ввел неправильно?
Комментарии:
1. Создание экземпляра
Priviledges
класса принимает один аргумент, как показано в определении. Соответствующий вызов (inAdmin.__init__
) не использует аргумент.2. Педантизм: правописание — это привилегии. Нет ‘d’.
3. На самом деле, поскольку
priviledges
аргумент inPriviledges.__init__
никогда не используется, рассмотрите__init__
возможность его удаления оттуда.
Ответ №1:
Вы оставили опечатку в привилегиях класса(), self.privileges2 должно быть self.privileges .
class Priviledges():
def __init__(self):
self.priviledges2 = ['can add post', 'can delete post',
'can ban user', 'can unban user']
Ответ №2:
В классе __init__()
функция запускается, как только объект вызывается как этот класс. Это означает, что любые аргументы, которые необходимы в __init__
функции, должны передаваться при вызове этого класса. В вашем определении класса ‘Privileges’ вы __init__
принимаете один аргумент, отличный от self
, privileges
. Однако в вашем Admin
определении класса вы вызываете privileges
вообще без каких-либо аргументов. Однако, поскольку похоже, что вы даже не используете аргумент в privileges
классе, рассмотрите возможность его удаления.
class Priviledges():
def __init__(self):
self.priviledges2 = ['can add post', 'can delete post',
'can ban user', 'can unban user']
def show_priviledges(self):
for priviledge in self.priviledges:
print(priviledge)
class User():
def __init__(self, first_name, last_name, username, age):
self.first_name = first_name
self.last_name = last_name
self.username = username
self.age = age
def describe_user(self):
print(self.first_name.title())
print(self.last_name.title())
print(self.username)
print(self.age)
def greet_user(self):
print('Hello, ' self.first_name.title() ', how are you doing?')
class Admin(User):
def __init__(self, first_name, last_name, username, age):
super().__init__(first_name, last_name, username, age)
self.priviledges = Priviledges()
admin = Admin('1','1','1','1')
admin.priviledges.show_priviledges()