Welcome to the Treehouse Community
The Treehouse Community is a meeting place for developers, designers, and programmers of all backgrounds and skill levels to get support. Collaborate here on code errors or bugs that you need feedback on, or asking for an extra set of eyes on your latest project. Join thousands of Treehouse students and alumni in the community today. (Note: Only Treehouse students can comment or ask questions, but non-students are welcome to browse our conversations.)
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and a supportive community. Start your free trial today.
Dan B6,155 Points
TypeError: super() takes at least 1 argument (0 given)
I'm getting this weird error even though I'm absolutely sure that the code I've written is the same as Kenneth's.
Traceback (most recent call last): File "<stdin>", line 1, in <module> File "inheritance.py", line 17, in __init__ super().__init__(name, **kwargs) TypeError: super() takes at least 1 argument (0 given)
import random # This is a 'parent' class to which other classes can inherit attributes class Character: def __init__(self, name, **kwargs): self.name = name for key, value in kwargs.items(): setattr(self, key, value) # Thief is inheriting the init and dictionary (kwargs) attributes from character class Thief(Character): sneaky = True def __init__(self, name, sneaky=True, **kwargs): # When we use super() we have to include the method name and the required argument(s) 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
I'm trying to run:
mark = Thief("Mark", sneaky=False, clever=True) So the exact same code that Kenneth is running, except he doesn't get an error and I have. I've spent 20 minutes looking at my code but can't understand why it's spitting out this error. I have passed in an argument to super() as far as I can see I passed name at the very least. P.S. If anyone could tell me how to set python syntax highlighting here in Treehouse that would be great. The Markdown Chatsheet just redirects to the forums.
Dan B6,155 Points
I just realised I'm using the REPL for Python 2.7.16 to run this...
Python 2.7.16 (default, Oct 10 2019, 22:02:15) [GCC 8.3.0] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> from inheritance import Thief >>> mark = Thief("Mark", sneaky=False, clever=True) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "inheritance.py", line 17, in __init__ super().__init__(name, **kwargs) TypeError: super() takes at least 1 argument (0 given)
Running this with python3 works fine.
But I would like to know, does anyone know what changed between Python 2.7.16 and Python 3.7.3 that makes this work? (If it isn't too much to explain)