Re: [Pyobjc-dev] Objc-agnostic model classes
Brought to you by:
ronaldoussoren
From: Bob I. <bo...@re...> - 2004-08-13 00:09:41
|
On Aug 12, 2004, at 8:01 PM, Jordan Krushen wrote: > On 12-Aug-04, at 4:26 PM, Bob Ippolito wrote: > >> Having Python objects that don't inherit from NSObject cross the >> bridge doesn't work as well as it could. Personally I think that >> everything in PyObjC should support KVC unless explicitly told not >> to, especially bridged pure python objects. That's more up to bill >> and ronald though. > > Are you saying that this shouldn't be done this way at all (shim > PyObjC class -> pure python class), or that in the shim's getters, I > should convert the pure Python objects back into an NSSomething: > > def expectedRaise(self): > return NSNumber.numberWithFloat_(self.pyPerson.expectedRaise) This isn't necessary, float should be bridged to NSNumber implicitly unless the selector says it should return an actual float. > def personName(self): > return NSString.stringWithString_(self.pyPerson.personName) This also isn't necessary, but you should ALWAYS USE UNICODE, or else you can have problems because NSString WILL NOT take arbitrary data. > If this shimming is what it takes, that's fine.. I'm mostly concerned > with how I can reuse the same model classes in Twisted and in PyObjC. > I do plan on having the model objects contain getters/setters to make > the shim classes easier, but I can't see how to have a pure Python > object support KVC without using objc.accessor or inheriting from > NSObject. Pure python objects could have KVC if the bridge supported it, which I am +1 on.. but I can't implement this right now and Bill or Ronald may have an objection to it. Basically I think that KVC on a pure python object should be just regular Python setting and getting. It may cause problems if the object explicitly inherits from NSObject (because you might want to do something else, or it could get in the way of a superclass' implemention) but for a non-NSObject it should be just what you want 100% of the time. >> BTW: You should never str(personName) .. you should use >> unicode(...). As for doubleValue(), etc. You don't know whether >> it's an integer, double, etc. from the NSNumber so you're better off >> calling what you want explicitly. > > Thanks for the tip. > >> I'd like to fix it but I'm too busy. I'm not sure when I'll have >> time. I don't use PyObjC+Twisted in any sort of production >> application right now. > > Ok. I'll try to think of some other way of doing this for now. Is > this really hairy stuff, or is there somewhere I should look to try to > help? I know you've mentioned that you're not sure where the bug > actually lies (Twisted v. PyObjC), but I'll be glad to help however I > can. Haven't written C in years, but I'm pretty sure I can still > mostly read it :) It's in Pyrex, and it's not very much code. It almost definitely has something to do with how using the GIL changed, but I just can't spend a few hours at it right now. -bob |