problem calling parent's __init__ method

R

Ryan Krauss

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?

Thanks,

Ryan
 
P

Peter Otten

Ryan said:
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:
.... def __init__(self): pass
........ def __init__(self):
.... A.__init__(self)
........ def __init__(self): pass
....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
 
R

Ryan Krauss

It is in fact an import problem. My module works fine by itself with
a test case in if __name__ == '__main__', but I have a problem when
using it within another module when both are underdevelopment.
Changing the reload order solves the problem.

This is bad:
import texpy, os, pytex
reload(texpy)
reload(pytex)

This is fine:
import texpy, os, pytex
reload(pytex)
reload(texpy)

The module we have been talking about is pytex. It gets imported into
texpy. The reload statements are the problem (I am fairly certain),
and I am only using them because things are under development.

Thanks to Peter and Jerry for their help.

Ryan
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,756
Messages
2,569,535
Members
45,008
Latest member
obedient dusk

Latest Threads

Top