I'm not sure how to do this, or where to start looking for the right
information, so any advice would be appreciated.
I want to implement a class with two (or more) different ways of looking
at its attributes.
One example of this might be complex numbers, which can be written in
Cartesian form (x+yi) or polar form (r cis theta).
(Yes, I know Python already has complex numbers. That was just an example.)
Another might be 3D vectors, which can be written in Cartesian form
[x, y, z], polar form [r, theta, z] or spherical polar [r, theta, phi].
It is important that there are no privileged attributes, e.g. in the
above example, I can set any of x, y, z, r, theta or phi and all the
others will automatically reflect the changes. A concrete, if simple,
example will make it clear.
Suppose I have a transformation (a,b) <-> (x,y) where:
x = a+b
y = a+2*b
I create an instance spam, and set a and b:
spam.a = 1
spam.b = 2
Now I should be able to read x and y:
print spam.x, spam.y
# prints 3 5
If I set attribute y:
spam.y = 0
a and b automatically change to match:
print spam.a, spam.b
# prints 6, -3
Anyone have any good ideas for how I should implement this?
Thanks,