Because it's the level at which angular designers thought that their directives should be used.Now if your question is why priority is defined over angular directives than the reason is
When there are multiple directives defined on a single DOM element,
sometimes it is necessary to specify the order in which the directives
are applied. The priority is used to sort the directives before their
compile functions get called. Priority is defined as a number.
Directives with greater numerical priority are compiled first.
Pre-link functions are also run in priority order, but post-link
functions are run in reverse order. The order of directives with the
same priority is undefined. The default priority is 0.
See this for more information.
If you would like to see general aggregation list of angular core directive priorities than here it is. Also one of the good read on angular directive.
And "can we override this priority using "priority Attribute"?" :
You can't override AngularJS built-in directives. However, you can define multiple directives with the same name and have them executed against the same element.By assigning appropriate priority to your directive, you can then control whether your directive runs before or after a built-in directive
Angular permit tinkering with priority of directives to choose execution of one before the other. For example ng-repeat has a priority of 1000, which is actually higher than custom directives (default priority is 0). You can use this number as a guide for how to set your own priority on your directives in relation to it.
angular.module('x').directive('customPriority', function() {
return {
priority: 1001,
restrict: 'E',
compile: function () {
return function () {...}
}
}
})
This plunker shows how to build an ng-click directive that executes before the built-in ng-click does.When clicking the link, the custom ng-click will run first, then the built-in ng-click does.