King wrote:

class MyFloat(object):
    def __init__(self, value=0.):
        self.value = value

    def set(self, value):
        self.value = value

    def get(self):
        return self.value

class MyColor(object):
    def __init__(self, value=(0,0,0)):
        self.value = (MyFloat(value[0]),
                        MyFloat(value[1]),
                        MyFloat(value[2]))

    def set(self, value):
        self.value[0].set(value[0])
        self.value[1].set(value[1])
        self.value[2].set(value[2])

    def get(self):
        return (self.value[0].get(),
                self.value[1].get(),
                self.value[2].get())

col = MyColor()
col[0].set(0.5) # 'MyColor' object does not support indexing
col[0] = 0.5 # 'MyColor' object does not support item assignment

King, I think you might be trying too hard. (Since I don't know your "big picture", my suspicion might be wrong.) Python does not *require* you to implement "get" and "set" methods in user-defined classes. More detail ...

* You might not need the MyFloat class at all. Try using a plain old Python "float" value.

* You don't need the "set" and "get" methods in the MyColor class. So this might suffice:

   class MyColor(object):
       def __init__(self, value=(0.,0.,0.)):
           self.value = list(value)

It's important for self.value to be a *list* object only if you want modify individual components of a MyColor instance. If you *do* want to modify individual components, then it *does* make sense to implement "set" and "get" methods:

       def set_comp(self, index, comp_value):
           self.value[index] = comp_value

       def get_comp(self, index):
           return self.value[index]

For debugging, it makes senses to implement a __str__ or __repr__ method, so that "print" produces useful output:

       def __str__(self):
           return "MyColor: %3.1f %3.1f %3.1f" % tuple(self.value)

Putting it all together ...

#-----------------
class MyColor(object):
   def __init__(self, value=(0.,0.,0.)):
       self.value = list(value)

   def __str__(self):
       return "MyColor: %3.1f %3.1f %3.1f" % tuple(self.value)

   def set_comp(self, index, comp_value):
       self.value[index] = comp_value

   def get_comp(self, index):
       return self.value[index]

col = MyColor()
print col              # output: MyColor: 0.0 0.0 0.0

col.set_comp(0, 0.5)
print col              # MyColor: 0.5 0.0 0.0

col.set_comp(2, 0.7)
print col              # MyColor: 0.5 0.0 0.7

col = MyColor((0.2, 0.3, 0.4))
print col              # MyColor: 0.2 0.3 0.4
#-----------------

-John

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to