83 lines
1.6 KiB
Plaintext
83 lines
1.6 KiB
Plaintext
This rule raises an issue when a call is made to a non-callable object.
|
|
|
|
== Why is this an issue?
|
|
|
|
:link-with-uscores1: https://docs.python.org/3/reference/datamodel.html#object.__call__
|
|
|
|
In order to be callable, a Python class should implement the {link-with-uscores1}[``++__call__++``] method. Thanks to this method, an instance of this class will be callable as a function.
|
|
|
|
|
|
However, when making a call to a non-callable object, a `TypeError` will be raised.
|
|
|
|
In order to fix this issue, make sure that the object you are trying to call has a `++__call__++` method.
|
|
|
|
=== Code examples
|
|
|
|
==== Noncompliant code example
|
|
|
|
[source,python]
|
|
----
|
|
class MyClass:
|
|
pass
|
|
|
|
myvar = MyClass()
|
|
myvar() # Noncompliant
|
|
|
|
none_var = None
|
|
none_var() # Noncompliant
|
|
----
|
|
|
|
|
|
==== Compliant solution
|
|
|
|
[source,python]
|
|
----
|
|
class MyClass:
|
|
def __call__(self):
|
|
print("called")
|
|
|
|
myvar = MyClass()
|
|
myvar()
|
|
----
|
|
|
|
|
|
:link-with-uscores1: https://docs.python.org/3/reference/datamodel.html#object.__call__
|
|
|
|
== Resources
|
|
|
|
=== Documentation
|
|
|
|
* {link-with-uscores1}[Python documentation - ++__call__++ method]
|
|
|
|
|
|
ifdef::env-github,rspecator-view[]
|
|
|
|
'''
|
|
== Implementation Specification
|
|
(visible only on this page)
|
|
|
|
=== Message
|
|
|
|
Fix this call; XX is not callable.
|
|
|
|
|
|
=== Highlighting
|
|
|
|
Primary: The name before the opening parenthesis
|
|
|
|
* Secondary 1 (if the call is made on a variable)
|
|
** location: The last value assigned.
|
|
** message: "Assigned value."
|
|
* Secondary 2
|
|
** location: The class definition
|
|
** message: "Definition."
|
|
|
|
|
|
'''
|
|
== Comments And Links
|
|
(visible only on this page)
|
|
|
|
=== relates to: S2873
|
|
|
|
endif::env-github,rspecator-view[]
|