But now having read the next class, I'm guessing it's NOT inherited.

How about  having a single routine `type' and `set_type' in the ancestor? The only way the descendants vary is the Vary header?