Why some model class methods return 'properties' instead of being actual model class attributes

Very newbie to the framework, this is just something came to mind and can’t figure it out.

I am talking about class methods like ‘attributeLabels’ or ‘rules’ that return a multidimensional array value-pairs ‘properties’.

Why are those class-methods instead of class-attributes? is it just a design taste, or am i missing something?

Easy: it allows us to put logic into these methods.

For example, attributeLables() can return different result depending on the current scenario ("Image" for "insert" and "New image" for "update" scenario).