Let me explain once more *why* this is dangerous.
Supose you have coded classes B (a base class) and C (a class derived
from B) and in C you call a method of B using __class__.__bases__:
class B:
def meth(self):
print "B.meth"
class C(B):
def meth(self): # override B.meth
print "C.meth"
self.__class__.__bases__[0].meth(self)
If you create a C instance and call its meth() you get the output you
expect:
>>> x = C()
>>> x.meth()
C.meth
B.meth
>>>
Now let's suppose we have a need for a derived class, D, and we don't
need to override meth in D. This could even happen in another module
by another programmer.
class D(C):
def other(self):
print "D.other"
Now if we create a D instance and call its meth(), what do you think
will happen?
>>> x = D()
>>> x.meth()
C.meth
C.meth
C.meth