TypeError: __init__() takes exactly 1 positional argument (2 given)

Steven D'Aprano steve+comp.lang.python at pearwood.info
Mon May 16 00:31:00 EDT 2011


On Sun, 15 May 2011 20:53:31 -0700, Gnarlodious wrote:

> Can someone please explain what I am doing wrong?
> 
> Calling script:
> 
> from Gnomon import GnomonBase
> Gnomon=GnomonBase(3)
> 
> 
> Called script:
> 
> class GnomonBase(object):
>     def __init__(self, bench):
>         # do stuff
> 
> But all I get is:
> TypeError: __init__() takes exactly 1 positional argument (2 given)
> 
> I don't understand, I am only sending one variable. What does it think I
> am sending two?

Whenever you call a method, the instance is automatically provided by 
Python as an argument (conventionally called "self") to the function.

So, for any arbitrary method, the call:

instance.method(arg)


is converted to:

type(instance).method(instance, arg)

hence two arguments.

My guess is that your GnomonBase __init__ method is *not* what you show 
above, but (probablY) one of the following:

    def __init__(bench):  # oops, forgot self
        # do stuff

    def __init__(selfbench):  # oops, forgot the comma
        # do stuff



-- 
Steven



More information about the Python-list mailing list