How to identify unsupported properties (such as vertex-groups) without relying on names?
Potential Solution?
I did some tinkering.
Visibily there's no way to add properties to this bpy.types.VertexGroup
it's also not possible to create inherited subclass in blender.
Maybe playing with memory address can help here
&gt;&gt;&gt; print(C.object.vertex_groups['Group'])
&lt;bpy_struct, VertexGroup(&quot;Group&quot;) at 0x000001BA8B6041C8&gt;

&gt;&gt;&gt; print(C.object.vertex_groups['Gro'])
&lt;bpy_struct, VertexGroup(&quot;Gro&quot;) at 0x000001BA8B6041C8&gt;

we can see that when changing the vg name, the memory address stays the same, so here we have an opportunity to identify our object. for example with the as_pointer() function
It's sure that the memory address will be lost when quitting the blender.exe, but we could counter that by saving the names of our VertexGroups in bpy.app.handlers.save_post the when the user open blender again we could reset all our addresses.
So the technique could work per blender session?
the only problem is that I'm not sure if blender can dynamically re-allocate memory if needed, or if the memory address will stay static per session.

Edit1*
Bad Idea, objects are dynamically allocated in memory and might change
So maybe we could identify our objects using __hash__?
I'll do some tests
Edit2*
no hash() method won't work, same for id() These function are based on memory too