[Tutor] subclass problem: __names and type-checking
Brian van den Broek
broek at cc.umanitoba.ca
Mon Oct 10 01:24:44 CEST 2005
Python said unto the world upon 2005-10-08 12:40:
> Traceback (most recent call last):
> File "C:/Python24/foofoofoo.py", line 26, in -toplevel-
> s2 = Sub2()
> File "C:/Python24/foofoofoo.py", line 22, in __init__
> super(Sub2, self).__init__()
> File "C:/Python24/foofoofoo.py", line 10, in __init__
> if type(self) == __TwoUnderBase: # What to write here
> NameError: global name '_TwoUnderBase__TwoUnderBase' is not defined
>
> Within a class, __ prefixes mangle the name to include the class name as
> part of the name. However, it appears that within a class statement,
> the __ prefix is not mangled. This is good for you because otherwise
> the inheritance would not work. However, it appears to make it
> impossible to directly reference the class name from within the class.
> You may want to rethink the idea of using __ prefixes in the class name.
> Normally __ is used to "privatize" attributes within a class.
Hi all,
I did give up the use of __ names in the case at hand. But I just
posted a question about how to reference a __ class name from with the
class on comp.lang.python. I used the code up-thread here. The F-bot
suggested:
class __TwoUnderBase(object):
def __init__(self):
if self.__class__.__name__ == "__TwoUnderBase":
print "From __TwoUnderBase"
else:
print "From subclass",
which does the trick. Thought I'd post it here in case of future googling.
Best to all,
Brian
More information about the Tutor
mailing list