components may share post-init tasks e.g. computing maxbound based on input arrays, right now we repeat this the __attrs_post_init__ hook in all components but it could be moved to the base class. this will make for simpler templates to generate code from.