Hi all, The code below exhibits an attempt to refer to the type of a __Class from within a method of that class. I've been unable to figure out how to make it work as I want, and would appreciate any insight.
The problem emerged out of a bad design that the good folks on the tutor list helped me repair. With that repair, I no longer need nor want to do this sort of thing in actual code. But the academic issue "How/Can it be done?" still itches. class _OneUnderBase(object): def __init__(self): if type(self) == _OneUnderBase: print "From _OneUnderBase" else: print "From subclass", class __TwoUnderBase(object): def __init__(self): # What to write in the if type() test to secure same # behaviour as _OneUnderBase if type(self) == __TwoUnderBase: print "From __TwoUnderBase" else: print "From subclass", class SubOne(_OneUnderBase): def __init__(self): super(SubOne, self).__init__() print "SubOne" class SubTwo(__TwoUnderBase): def __init__(self): super(SubTwo, self).__init__() print "SubTwo" s1 = SubOne() s2 = SubTwo() When run, this gives: >>> From subclass SubOne Traceback (most recent call last): File "C:/Documents and Settings/Owner/My Documents/PythonFiles/foo.py", line 28, in ? s2 = SubTwo() File "C:/Documents and Settings/Owner/My Documents/PythonFiles/foo.py", line 24, in __init__ super(SubTwo, self).__init__() File "C:/Documents and Settings/Owner/My Documents/PythonFiles/foo.py", line 12, in __init__ if type(self) == __TwoUnderBase: NameError: global name '_TwoUnderBase__TwoUnderBase' is not defined >>> So, the _OneUnderBase version works fine. I've been unable to work out what to write in the __TwoUnderBase version to make it work the same. (In case it is not clear, I'm aiming at the output: From subclass SubOne From subclass SubTwo ) I *think* I understand how __ name mangling works when making references from one module to another. But I cannot work it out reference to the class itself from within a __ class. Should it matter: Python 2.4.2 on Win32. Thanks, Brian vdB -- http://mail.python.org/mailman/listinfo/python-list