Reputation: 1
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
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
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