problem calling parent's __init__ method

Peter Otten __peter__ at web.de
Thu Aug 7 11:36:25 EDT 2008


Ryan Krauss wrote:

> I am trying to call a parent's __init__ method from the child's:
> 
> class ArbitraryBlock(InnerBlock):
>     def __init__(self, codelist, noout=False, **kwargs):
>         InnerBlock.__init__(self, codelist, noout=noout, **kwargs)
> 
> 
> I get this error:
> 
> <type 'exceptions.TypeError'>: unbound method __init__() must be
> called with InnerBlock instance as first argument (got ArbitraryBlock
> instance instead)
> 
> 
> I found a thread that talked about the parent and child being
> different types, so I tried setting up the parent class 3 different
> ways:
> 
> class InnerBlock:
> 
> class InnerBlock(object):
> 
> class InnerBlock(empty_class):
> 
> where
> 
> class empty_class(object):
>     def __init__(self,_d={},**kwargs):
>         kwargs.update(_d)
>         self.__dict__=kwargs
> 
> I still get the same error.  Why doesn't this work?

For some reason you have two InnerBlock classes in your code. A
demonstration:

>>> class A(object):
...     def __init__(self): pass
...
>>> class B(A):
...     def __init__(self):
...             A.__init__(self)
...
>>> B()
<__main__.B object at 0x2b67aae02c90>
>>> class A(object):
...     def __init__(self): pass
...
>>> B()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in __init__
TypeError: unbound method __init__() must be called with A instance as first
argument (got B instance instead)

Are you perhaps importing your main script into your main script?

Peter



More information about the Python-list mailing list