0

while messing around with an example from a book:

class Quick():
    def __str__(self):
        return "\n".join(f"{k}: {v}" for k, v in vars(self).items())



class User(Quick):

    def __init__(self, first, last, location, gender):
        super().__init__()
        self.first = first
        self.last = last
        self.location = location
        self.gender = gender
        self.loginattempt = 0

    def mmplusattempt(self):
        self.loginattempt += 1

    def mmresetattempt(self):
        self.loginattempt = 0

    def __str__(self):
        return "\n".join(f"{k}: {v}" for k, v in vars(self).items())


class Admin(User):

    def __init__(self, first, last, location, gender):
        super().__init__(first, last, location, gender)
        self.privileges = ["delete post", "ban user", "shutdown server", "restart server"]

    def show(self):
        for p in self.privileges:
            print(f"This user can: {p}. \n")
        



admin = Admin("ADMIN", "ADMIN", "SERVER ROOM", "ADMIN")
print(admin.show())

this for some reason outputs :

This user can: delete post. 

This user can: ban user. 

This user can: shutdown server. 

This user can: restart server. 

None
  

I am not sure why it prints None. Changed show() to check for null value:

def show(self):
        for p in self.privileges:
            if p != None:
                print(f"This user can: {p}. \n")

still outputs None.

I thought maybe the loop wasn't working like I intended it to so added a null value in self.privileges to see if the loop was checking for null value correctly: self.privileges = ["delete post", "ban user", "shutdown server", None, "restart server"] output:

└─$ python3 classuser.py
This user can: delete post. 

This user can: ban user. 

This user can: shutdown server. 

This user can: restart server. 

None

Obviously the if test is working correctly. Where is this null value coming from?

Aiden Choi
  • 142
  • 7

1 Answers1

0

show function haven't return any value if you return something in show, None will gone.

    def show(self):
        for p in self.privileges:
            print(f"This user can: {p}. \n")
        return "haha"