In the following toy example, the last line B().show() doesn't call the appropriate version of show function. It's supposed to call the child version rather than the parent version. I guess I should do something like __class_method() but couldn't figure out a complete answer.
I can certainly overwrite show function in B. But that essentially means to copy and paste show function. It's not elegant.
## version one ##
class A(object):
def method(self):
print("hello")
def show(self):
self.method()
class B(A):
def method(self):
print("goodbye")
A().show() ## print out hello
B().show() ## print out goodbye
## version two ##
class A(object):
def __method(self):
print("hello")
def show(self):
self.__method()
class B(A):
def __method(self):
print("goodbye")
A().show() ## print out hello
B().show() ## print out hello