Это стандартное поведение. Если какой-то атрибут/метод не найден в текущем объекте, то проверяется его класс, а потом родительский класс. Точный порядок определен в __mro__. Если нужно вызвать что-то из родительского класса принудительно в обход текущего, то используется функция super. При множественном наследовании могут возникнуть сложности.