Python Object-Oriented Python Inheritance Super-Duper!

Philip Schultz
Philip Schultz
11,337 Points

I don't see where my syntax error is, can someone help?

Hello everyone, I can't seem to get workspaces to run this code. I think it's the same as Kenneth's in the video , but I get a syntax error (syntaxERROR: non-default argument follows default argument). Can someone tell me what I'm doing wrong?

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

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


class Thief(Character):
    sneaky = True

    def __init__(self, sneaky = True, name, **kwargs):
        super().__init__(name, **kwargs)
        self.sneaky = sneaky


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

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

OUTPUT:

File "characters.py", line 14
def init(self, sneaky = True, name, **kwargs):
^
SyntaxError: non-default argument follows default argument

1 Answer

Dave StSomeWhere
Dave StSomeWhere
19,809 Points

The issue is with the order of your parameters, hence the error "SyntaxError: non-default argument follows default argument"

It is saying that name, a positional/non default parameter cannot follow sneaky = True, a default argument.

So you need to switch their order and it should work as expected.

    def __init__(self, name, sneaky=True, **kwargs):
Philip Schultz
Philip Schultz
11,337 Points

Ugg...how didn't I catch that.....thank you