problem calling parent's __init__ method

Ryan Krauss ryanlists at gmail.com
Thu Aug 7 11:57:38 EDT 2008


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


On Thu, Aug 7, 2008 at 10:36 AM, Peter Otten <__peter__ at web.de> wrote:
> 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
> --
> http://mail.python.org/mailman/listinfo/python-list
>



More information about the Python-list mailing list