This breaks down for the perfectly reasonable case of:
hostname = Value("foo") class First(Container): port = Value(64) hostname = hostname username = Value("zoop") class Second(Container): username = Value("pooz") hostname = hostname port = Value(24)
ie, it breaks down as soon as you try to re-use anything, which is quite surprising to the unsuspecting user, and pretty unfortunate even once you do understand why.
So you use...
hostname = "foo"
class First(Container): port = Value(36) hostname = Value(hostname) username = Value("zoop")
As long as the documentation describes the proper semantics if one cares about orderings (create new TypedAttrribute instance for every value), when anyone asks, a quick "read the documentation page" would be sufficient.
One could also explain why the hoops are to be jumped through in the first place (dict non-ordering during class instantiation).