
Inline adoc files when they are included exactly once. Also fix language tags because this inlining gives us better information on what language the code is written in.
67 lines
1.5 KiB
Plaintext
67 lines
1.5 KiB
Plaintext
== Why is this an issue?
|
|
|
|
Implementing the special method ``++__ne__++`` is not equivalent to implementing the special method ``++__eq__++``. By default ``++__ne__++`` will call ``++__eq__++``, but the default implementation of ``++__eq__++`` does not call ``++__ne__++``.
|
|
|
|
|
|
This rule raises an issue when the special method ``++__ne__++`` is implemented but not the ``++__eq__++`` method.
|
|
|
|
|
|
=== Noncompliant code example
|
|
|
|
[source,python]
|
|
----
|
|
class Ne:
|
|
def __ne__(self, other): # Noncompliant.
|
|
return False
|
|
|
|
myvar = Ne() == 1 # False. __ne__ is not called
|
|
myvar = 1 == Ne() # False. __ne__ is not called
|
|
myvar = Ne() != 1 # False
|
|
myvar = 1 != Ne() # False
|
|
----
|
|
|
|
|
|
=== Compliant solution
|
|
|
|
[source,python]
|
|
----
|
|
# Recommended, as __ne__ delegates to __eq__ by default
|
|
class Eq:
|
|
def __eq__(self, other):
|
|
return True
|
|
|
|
myvar = Eq() == 1 # True
|
|
myvar = 1 == Eq() # True
|
|
myvar = Eq() != 1 # False. __eq__ is called
|
|
myvar = 1 != Eq() # False. __eq__ is called
|
|
|
|
# OR if __ne__ needs a special implementation
|
|
|
|
class Eq:
|
|
def __eq__(self, other):
|
|
return True
|
|
|
|
def __ne__(self, other):
|
|
return False
|
|
----
|
|
|
|
|
|
:link-with-uscores1: https://docs.python.org/3/reference/datamodel.html#object.__ne__
|
|
|
|
== Resources
|
|
|
|
* Python documentation - {link-with-uscores1}[the ++__ne__++ special method]
|
|
|
|
ifdef::env-github,rspecator-view[]
|
|
|
|
'''
|
|
== Implementation Specification
|
|
(visible only on this page)
|
|
|
|
=== Highlighting
|
|
|
|
The "__ne__" method name
|
|
|
|
|
|
endif::env-github,rspecator-view[]
|