Maybe an attribute could be a class as well? Typecasting, initialisation and validation could live in Attribute then instead of Model::Base.