HeadV2 should inherit from HeadV1 which should inherit from HeadV0 which should inherit from Head
Heads classes does not inherit from each others.
One can argue that composition (as it is used actually) is a good practice over inheritance.
But it leads to this kind of code in clients:
# capture sofware and version
if isinstance(head, HeadV2):
node.software = head.v1.software
node.version = head.v1.software_version
else:
node.software = head.software
node.version = head.software_version
As each Head version only add some fields and not some logic or complex configuration, inheritance should be used.