On Aug 5, 2004, at 2:48 PM, Gustavo Niemeyer wrote: > Hello Ronald, > >> I'm in favor of @decorators. It's easy to notice them when the are >> present and they are clearly special. The '[decorator] def ...' and > > Why are they special? Why should they be more important than any other > part of the function definition? Because they take a function object as input and can do whatever they want with it and return something else. >> 'decorate(decorator) def ...' are very magic, and are IMHO unfriendly >> to newbies (you must metion them in any introduction to python, >> because >> otherwise users would complety mis the signicance of the decorations). > [...] >> @objc.signature("v@:@i") >> def saveSheetDidDismiss_returnCode_contextInfo_(self, sheet, >> returnCode, contextInfo): >> pass >> >> The argument to objc.signature is fairly magic and I do try to >> abstract >> it away (such as with the introduction of objc.accessor), but that's >> not always possible. If decorators were not allowed to have arguments >> I'd have to introduce temporary functions that wouldn't help in >> readability. > > Is special syntax in the language really required in this case, > considering you're already doing something "fairly magic" anyways? The alternative would be (current syntax and current PyObjC) this: def saveSheetDidDismiss_returnCode_contextInfo_(self, sheet, returnCode, contextInfo): pass saveSheetDidDismiss_returnCode_contextInfo_ = objc.selector(saveSheetDidDismiss_returnCode_contextInfo_, signature='v@:@i') Yes, we pretty much do need special syntax (without using a hack like PJE's). Code like this is pretty commonplace in PyObjC projects. >> def saveSheetDidDismiss_returnCode_contextInfo_(self, sheet, > What is objc.signature() doing? objc.signature wraps the function object with an objc.selector that specifies specific return and argument types. In this particular case, it declares that the selector saveSheetDidDismiss:returnCode:contextInfo: returns void and takes an object and an integer as arguments. Without this, the selector can not be bridged correctly to the Objective C runtime and the program would crash. The ctypes package behaves similarly and would use decorators for the same thing. I imagine that other runtime/language bridges would also benefit from similar techniques (Jython, IronPython, Python.NET, JPython.. or whatever else). I can also imagine it being used for things like XML-RPC, SOAP, Apple Events, COM, etc. in a similar manner. -bob
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4