When you make a child from a parent in the content browser, you have not instanced any real blueprints. You have just made a definition of another sort of BP ( the child ), which is based on the parent.
Even when you have an actual parent and child in a level, ‘Self’ is always a reference to the local BP. It will be the child, in the child. The same for the parent.
You need a running instance of the parent in your level, then you have a ‘real’ parent. It can spawn a child BP. Now you have two running BPs.
Then you can reach the parent using ‘get parent actor’ inside the child.
Let’s say you make a Blueprint Actor called BP_a, and a child class of the Blueprint called BP_b. When you spawn it in the world, the spawned Actor is a BP_a instance, and a BP_b instance. It’s called polymorphism. There is no “Parent object” and “Child object”. There’s just one object. So when you got a reference to the “Parent” object, you just got a reference to self. Why would you need to access the “Parent”, anyway? The child should carry over all variables and functions and all functionality.