is it possible to give an instance a value?

manstey manstey at csu.edu.au
Tue Mar 6 17:45:45 EST 2007


Hi,

My question probably reflects my misunderstanding of python objects,
but I would still like to know the answer.

The question is, is it possible for an instnace to have a value (say a
string, or integer) that can interact with other datatypes and be
passed as an argument?

The following code of course gives an error:

class Test(object):
     def __init__(self, val):
           self.val = val

>>> a = Test('hello')
>>> a.val  + ' happy'
'hello happy'
>>> a + 'happy'
TypeError: unsupported operand type(s) for +: 'Test' and 'str'

Is there a way to make a have the value a.val when it is used as
above, or as an argument (eg function(a, 10, 'sdf') etc)?

The only fudge I discovered for simple addition was to add to the
class

   def __add__(self, obj):
       return a.val + obj

but this doesn't solve the problem in general. I have tried
subclassing the string type, but as it is immutable, this is not
flexible the way a.val is (i.e. it can't e reassigned and remain a
subclass).

Any pointers, or is my question wrong-headed?

btw, my motivation is wanting to mimic another oo language which
allows this, so it allows:

>>>Person.Address
'Sydney'
>>>Person.Address.type
'%String'
>>>Person.Address = 'Canberra'
>>>print Person.Address. Person.Address.type
Canberra %String

etc.

We have had to implement Person.Address as Person.Address.val, making
Address an instance with .val, .type, etc.




More information about the Python-list mailing list