DedProtectr
DedProtectr

Reputation: 1

Python Crash Course 9-8

I'm going through the book Python Crash Course by Eric Matthes, and I'm stuck on the 8th 'Try It yourself' on chapter 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()

So far, I type this in, however every time I run it I get the same error

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'

Can someone help me out here? What did I type wrong?

Upvotes: 0

Views: 830

Answers (2)

martin
martin

Reputation: 25

You left a typo in class Priviledges(), self.priviledges2 should be self.priviledges.

class Priviledges():
def __init__(self):
    self.priviledges2 = ['can add post', 'can delete post',
                         'can ban user', 'can unban user']

Upvotes: 1

Jasdeep Jutla
Jasdeep Jutla

Reputation: 13

In a Class, the __init__() function is run as soon as an object is called as that class. This means that any arguments that are needed in the __init__ function need to be passed when you call that class. In your 'Privileges' class definition, you __init__ takes one argument other than self, privileges. However, in your Admin class definition, you are calling privileges without any arguments at all. However, since it looks like you aren't even using the argument in the privileges class, consider removing it.

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()

Upvotes: 0

Related Questions