Objects with different data views

Steven D'Aprano steve at REMOVETHIScyber.com.au
Fri Oct 7 12:52:22 EDT 2005


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,



-- 
Steven.




More information about the Python-list mailing list