From: Jeff E. <je...@ad...> - 2002-05-28 20:13:38
|
This works for me: Foo.java: public class Foo { java.util.Hashtable table = new java.util.Hashtable(); public Object __setitem__(Object key, Object value) { System.out.println("in Foo.__setitem__ " + key + " " + value); table.put(key,value); return value; } public Object __getitem__(Object key) { System.out.println("in Foo.__getitem__ " + key); return table.get(key); } } Jython 2.1 on java1.4.0 (JIT: null) Type "copyright", "credits" or "license" for more information. >>> import Foo >>> f=Foo() >>> f['a']='b' in Foo.__setitem__ a b >>> f['b'] in Foo.__getitem__ a 'b' >>> James Carroll wrote: > I just tried implementing the __getitem__ and __setitem__ as java > methods, hoping that Jython would use them, and no luck > > >>>>nii.getAttributesAsXML() >>>> > '<?xml version="1.0"?><attributes> <attribute name="relative filename" > value="mbf.gif"/> <attribute name="resolution_x" > value="1.0"/></attributes>' > >>>>nii.__getattr__("relative filename") >>>> > 'mbf.fpx' > >>>>nii.__setattr__("relative filename", "fish.gif") >>>> > 'fish.fpx' > >>>>nii.__getattr__("relative filename") >>>> > 'fish.fpx' > >>>>nii.getAttributesAsXML() >>>> > '<?xml version="1.0"?><attributes> <attribute name="relative filename" > value="fish.fpx"/> <attribute name="resolution_x" > value="1.0"/></attributes>' > >>>>nii['relative filename'] >>>> >>>> > > This should have returned the 'fish.gif' as a string, but no such > luck... does anyone have an idea if this is possible? > > > My Java code looks like: > class NII > {... > > // some Jython accessors for treating this like a Python Dictionary > public String __getattr__(String name) > { > NamedParameter np = getAttribute(name); > return np.getValueString(); > } > > public String __setattr__(String name, String value) > { > NamedParameter np = getAttribute(name); > np.setValueString(name, value) > return value; > } > > } > > > >>-----Original Message----- >>From: Jeff Emanuel [mailto:je...@ad...] >>Sent: Tuesday, May 28, 2002 12:35 PM >>To: Dinu Gherman >>Cc: jyt...@li... >>Subject: Re: [Jython-users] Getting Python-like dictionaries? >> >> >> >>But this won't let you change the py dict and have the >>changes affect the nsDict. You might want to wrap the nsDict >>with a python class sort of like this: >> >>class Wrapper: >> def __init__(self,nsDict): >> self.nsDict=nsDict >> def __getitem__(self,key): >> return self.nsDict.objectForKey(key) >> def __setitem__(self,key,value): >> self.nsDict.setObjectForKey(key,value) >> >>pyDict = Wrapper(nsDict) >> >> >> >>Dinu Gherman wrote: >> >> >>>Yep, it turns out the following code gets the job done >>> >>(nasty imports >> >>>omitted ;-): >>> >>> def convertNSDictionaryToPyDict(nsDict): >>> "Convert an NSDictionary to a Jython Dictionary." >>> >>> myPool = NSAutoreleasePool.push() >>> >>> dict = {} >>> keyEnum = nsDict.keyEnumerator() >>> while keyEnum.hasMoreElements(): >>> k = keyEnum.nextElement() >>> dict[k] = nsDict.objectForKey(k) >>> >>> NSAutoreleasePool.pop(myPool) >>> >>> return dict >>> >>>Thanks, Samuele and Danny! >>> >>>Dinu >>> >> >> >>_______________________________________________________________ >> >>Don't miss the 2002 Sprint PCS Application Developer's >>Conference August 25-28 in Las Vegas -- >>http://devcon.sprintpcs.com/adp/index.cfm >> >> >>_______________________________________________ >>Jython-users mailing list >>Jyt...@li... >>https://lists.sourceforge.net/lists/listinfo/jython-users >> >> > > _______________________________________________________________ > > Don't miss the 2002 Sprint PCS Application Developer's Conference > August 25-28 in Las Vegas -- http://devcon.sprintpcs.com/adp/index.cfm > > _______________________________________________ > Jython-users mailing list > Jyt...@li... > https://lists.sourceforge.net/lists/listinfo/jython-users > |