Ускоренный курс Python 9-8

#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 класса принимает один аргумент, как показано в определении. Соответствующий вызов (in Admin.__init__ ) не использует аргумент.

2. Педантизм: правописание — это привилегии. Нет ‘d’.

3. На самом деле, поскольку priviledges аргумент in Priviledges.__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()