[Python-Dev] A Desperate Plea For Introspection (aka: BDFAP Needed)
Yury Selivanov
yselivanov.ml at gmail.com
Fri Jun 22 21:24:41 CEST 2012
On 2012-06-22, at 3:18 PM, Guido van Rossum wrote:
> On Fri, Jun 22, 2012 at 12:10 PM, Yury Selivanov
> <yselivanov.ml at gmail.com> wrote:
>> Guido,
>>
>> On 2012-06-22, at 2:52 PM, Guido van Rossum wrote:
...
>> 'empty' will also work. When python-dev collectively decided to
>> go with missing attributes, 'empty' didn't yet exist (we added
>> it with 'replace()' methods).
>>
>> If you think that using 'empty' is better, we can add that to the PEP.
>
> Yes, please do.
OK
>>> (2) Could use an example on how to remove and add parameters using replace().
>>
>> You have to build a new list of parameters and then pass it to 'replace()'.
>> Example (from the actual signature() function implementation):
>>
>> if isinstance(obj, types.MethodType):
>> # In this case we skip the first parameter of the underlying
>> # function (usually `self` or `cls`).
>> sig = signature(obj.__func__)
>> return sig.replace(parameters=tuple(sig.parameters.values())[1:])
>>
>>> (3) You are using name(arg1, *, arg2) a lot. I think in most cases you
>>> mean for arg2 to be an optional keyword arg, but this notation doesn't
>>> convey that it is optional. Can you clarify?
>>
>> Yes, I meant optional. Would 'name(arg1, *, [arg2])' be better?
>
> Hardly, because that's not valid syntax. I'd write name(arg1, *,
> arg2=<default>).
Like
replace(*, name=<default>, kind=<default>, default=<default>,
annotation=<default>) -> Parameter
or
replace(*, name=<optional>, kind=<optional>, default=<optional>,
annotation=<optional>) -> Parameter
>>> (4) "If the object is a method" -- shouldn't that be "bound method"?
>>> (Unbound methods are undetectable.) Or is there some wider definition
>>> of method? What does it do for static or class methods?
>>
>> Yes, it should be "If the object is a bound method". We'll fix this
>> shortly.
>
> Great.
>
>> classmethod as a descriptor returns a BoundMethod (bound to the class),
>> staticmethod returns the original unmodified function, so both of
>> them are supported automatically.
>
> Oh, great. IIRC it wasn't always like that. Maybe just add this to the
> PEP as a note?
OK. I'll clarify that.
-
Yury
More information about the Python-Dev
mailing list