class Base:

    def foo(self):
        print('foo')

def bar(self):
    self.foo()


class Derived(Base):

    def foo(self):
        print('chocolate')
How do overridden method calls from base-class methods work?