Re: [Python-Dev] cpython: inspect: Micro-optimize __eq__ for Signature, Parameter and BoundArguments

2015年5月14日 23:09:07 -0700

On 15.05.15 01:23, yury.selivanov wrote:
https://hg.python.org/cpython/rev/f0b10980b19e
changeset: 96056:f0b10980b19e
parent: 96054:15701e89d710
user: Yury Selivanov <[email protected]>
date: Thu May 14 18:20:01 2015 -0400
summary:
 inspect: Micro-optimize __eq__ for Signature, Parameter and BoundArguments
Provide __ne__ method for consistency.
files:
 Lib/inspect.py | 32 ++++++++++++++++++++++----------
 1 files changed, 22 insertions(+), 10 deletions(-)
diff --git a/Lib/inspect.py b/Lib/inspect.py
--- a/Lib/inspect.py
+++ b/Lib/inspect.py
@@ -2353,11 +2353,15 @@
 return hash((self.name, self.kind, self.annotation, self.default))
 def __eq__(self, other):
- return (issubclass(other.__class__, Parameter) and
- self._name == other._name and
- self._kind == other._kind and
- self._default == other._default and
- self._annotation == other._annotation)
+ return (self is other or
+ (issubclass(other.__class__, Parameter) and
+ self._name == other._name and
+ self._kind == other._kind and
+ self._default == other._default and
+ self._annotation == other._annotation))
It would be better to return NotImplemented if other is not an instance of Parameter.
 if self is other:
 return True
 if not isinstance(other, Parameter):
 return NotImplemented
 return (self._name == other._name and
 self._kind == other._kind and
 self._default == other._default and
 self._annotation == other._annotation)
And why you use issubclass() instead of isinstance()?
+ def __ne__(self, other):
+ return not self.__eq__(other)
This is not need (and incorrect if __eq__ returns NotImplemented). The default __ne__ implementations calls __eq__ and correctly handles NotImplemented.
_______________________________________________
Python-Dev mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to