How to make objects execute their operations in a specific field/ring?
Providing some context: i want to create a class to operate on isogeny graphs of elliptic curves. So it should have the $j$-invariants (integers modulo $p$) as nodes and the existence of $l$-isogenies as edges.
To compute the edges i need to do some calculations on GF(p) and some others on the ring PolynomialRing(GF(p), ['X', 'Y']).
How do i make sure the operations happen on their specific rings and don't change the field outside of the class?
You should provide a concrete example of wrong behaviour, so that we can explain what happens, and how to work around.