[Python-Dev] PEP 318 bake-off?
Bob Ippolito
bob at redivi.com
Thu Apr 1 14:33:24 EST 2004
On Apr 1, 2004, at 2:08 PM, Guido van Rossum wrote:
>>> What I'm asking (especially of Phillip) is to collect a set of
>>> realistic method declarations using decorators; we can then
>>> collectively format these using any of the possible syntaxes, and see
>>> how they look.
>>
>> I'd be happy to scrounge up some samples from existing code using
>> 'property' and 'classmethod' as well as some of PEAK's decorators,
>> and I
>> definitely think that Jack Diedrich and Bob Ippolito's samples should
>> be
>> included as well.
>>
>> Important question, though: do we include code bodies, or just use
>> 'pass'
>> for the bodies? If we include the body, how much of the body?
>> Should we
>> include entire classes, especially if the class itself needs a
>> decorator,
>> and multiple methods have decorators?
>
> Why not provide the bodies, for added realism?
>
> (I still think class decorators are a separate case, and much weaker
> -- you can do this by having a single 'decoratable' metaclass and
> setting __decorators__ = [...] in the class body.)
Here's something I wrote today.. it's a delegate for the exception
handling mechanism so you can listen in on (any of) the exceptions that
ObjC throws whether or not they are caught by something else.. the
Python->PyObjC exceptions are logged as tracebacks and the ObjC
exceptions are thrown over to atos so they turn into human-readable
stack traces.
As you can see, it's rather ugly with regular old Python syntax.
class PyObjCDebuggingDelegate(NSObject):
def exceptionHandler_shouldLogException_mask_(self, sender,
exception, aMask):
try:
if isPythonException(exception):
if self.verbosity() & LOGSTACKTRACE:
nsLogObjCException(exception)
return nsLogPythonException(exception)
elif self.verbosity() & LOGSTACKTRACE:
return nsLogObjCException(exception)
else:
return False
except:
print >>sys.stderr, "*** Exception occurred during
exception handler ***"
traceback.print_exc(sys.stderr)
return True
exceptionHandler_shouldLogException_mask_ =
objc.selector(exceptionHandler_shouldLogException_mask_,
signature='c@:@@I')
def exceptionHandler_shouldHandleException_mask_(self, sender,
exception, aMask):
return False
exceptionHandler_shouldHandleException_mask_ =
objc.selector(exceptionHandler_shouldHandleException_mask_,
signature='c@:@@I')
the objc.selector signatures say that they return a char (a BOOL,
actually), the following @: represents "self" and the selector (the
"method name"), the next two @@ say that the sender and exception
arguments are both ObjC objects, and the trailing I means that aMask is
an unsigned int.
-bob
More information about the Python-Dev
mailing list