Python Object-Oriented Python Inheritance Super-Duper!

Youssef Moustahib
Youssef Moustahib
7,778 Points

Have I got this Right for super()

import random

class Character:
    def __init__(self, name, **kwargs): = name

        for key,value in kwargs.items():
            setattr(self, key, value)

class Thief(Character):
    sneaky = True
    def __init__(self, name, sneaky=False, strength = 10, skill=90, **kwargs):
        super().__init__(name, **kwargs)
        self.sneaky = sneaky
        self.strength = strength
        self.skill = skill

    def pickpocket(self):
        return self.sneaky and bool(random.randint(0,1))

    def hide(self, light_level):
        return self.sneaky and light_level < 10 

1) Super is calling to the parent class, and is asking for name and kwargs, therefore we do not have to add any extra code in thiefs init method?

2) Do I have to add in things such as "name" and "kwargs" into thiefs init, to make super work?


Hi Youssef. Yes, it looks like it will work. Some comments:

After the line where sneaky = True, in the init, sneaky=False. I would recommend making sneaky=True as a default (just the nature of any good thief I suppose).

If you wanted to, you could consider improving this by moving strength into the Character class, since just like every character has a name, every character also has a level of strength. That is completely up to you.

To your Q#2: Yes, every thief (and every character) has a name, so if I create a character without a name, I get an error. However, kwargs can be left blank; no error would result.