On Wed, 2008-08-06 at 05:50 -0700, Slaunger wrote: > Hi, > > I am new here and relatively new to Python, so be gentle: > > Is there a recommended generic implementation of __repr__ for objects > equal by value to assure that eval(repr(x)) == x independet of which > module the call is made from? > > Example: > > class Age: > > def __init__(self, an_age): > self.age = an_age > > def __eq__(self, obj): > self.age == obj.age > > def __repr__(self): > return self.__class__.__name__ + \ > "(%r)" % self.age > > age_ten = Age(10) > print repr(age_ten) > print eval(repr(age_ten)) > print eval(repr(age_ten)).age > > Running this gives > > Age(10) > Age(10) > 10 > > Exactly as I want to. > > The problem arises when the Age class is iomported into another module > in another package as then there is a package prefix and the above > implementation of __repr__ does not work. > > I have then experimented with doing somthing like > > def __repr__(self): > return self.__module__ + '.' + self.__class__.__name__ + > "(%r)" % self.age > > This seems to work when called from the outside, but not from the > inside of the module. That is, if I rerun the script above the the > module name prefixed to the representation I get the following error > > Traceback (most recent call last): > File "valuetest.py", line 15, in <module> > print eval(repr(age_ten)) > __main__.Age(10) > File "<string>", line 1, in <module> > NameError: name '__main__' is not defined > > This is pretty annoying. > > My question is: Is there a robust generic type of implementation of > __repr__ which I can use instead? > > This is something I plan to reuse for many different Value classes, so > I would like to get it robust. > > Thanks, > Slaunger > -- > http://mail.python.org/mailman/listinfo/python-list
Are you really sure this is what you want to do, and that a less tricky serialization format such as that provided by the pickle module wouldn't work for you? -- John Krukoff <[EMAIL PROTECTED]> Land Title Guarantee Company -- http://mail.python.org/mailman/listinfo/python-list