On 2012-06-14, at 12:03 PM, Ethan Furman wrote:

> Yury Selivanov wrote:
>> Hello,
>> The new revision of PEP 362 has been posted:
>> http://www.python.org/dev/peps/pep-0362/
>> It's possible to test Signatures for equality.  Two signatures
>> are equal when they have equal parameters and return annotations.
> 
> Possibly a dumb question, but do the parameter names have to be the same to 
> compare equal?  If yes, is there an easy way to compare two signatures by 
> annotations alone?

Yes, parameter names have be the same.

You need to write a custom compare function for Parameters,
that will check that two have (or both don't) equal
annotations and *kinds*, and then write a compare function
for Signatures, that will test return_annotations and
'parameters' collections.

All in all, shouldn't be longer than 10-15 lines of code.

Another "solution" to the problem could be adding a new 'annotations' 
read-only dynamic property to the Signature, that would iterate 
through parameters and produce a single dict.  But this solution
has a serious flaw, as signature of:

   def foo(a:int, *, b:int) -> float

is not equal to the signature of:

   def bar(a:int, b:int) -> float

and certainly not the signature of:

   def spam(*args:int, **kwargs:int) -> float

So the most correct approach here is the one I described in the
first place.


Thanks,

-
Yury
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to