global name 'self' is not defined - noob trying to learn

David Bolen at
Mon Mar 30 19:53:48 CEST 2009

mark.seagoe at writes:

> class myclass(object):
> #
>     # def __new__(class_, init_val, size, reg_info):
>     def __init__(self, init_val, size, reg_info):
>         # self = object.__new__(class_)
>         self.reg_info = reg_info
>         print self.reg_info.message
>         self.val = self

Note that here you assign self.val to be the object itself.  Are you
sure you didn't mean "self.val = init_val"?

> (...)
>     def __int__(self):
>         return self.val

Instead of an integer, you return the current class instance as set up
in __init__.  The __int__ method ought to return an integer.

>     def __long__(self):
>         return long(self.val)

And this will be infinite recursion, since long(<obj>) will try to
call the __long__ method on <obj> so you're just recursing on the
__long__ method.

You can see this more clearly with:

    >>> cat = myclass(0x55, 32, my_reg)
    >>> int(cat)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: __int__ returned non-int (type myclass)

I won't post the traceback for long(cat), as it's, well, "long" ...

-- David

More information about the Python-list mailing list