== Why is this an issue?

Class methods that don't access instance data can and should be static because they yield more performant code.


To implement a static method in Python one should use either ``++@classmethod++`` or ``++@staticmethod++``. A class method receives the class as implicit first argument, just like an instance method receives the instance. A static method does not receive an implicit first argument.

=== Noncompliant code example

[source,python]
----
class Utilities:
    def do_the_thing(self, arg1, arg2, ...):  # Noncompliant
        #...
----

=== Compliant solution

[source,python]
----
class Utilities:
    @classmethod
    def do_the_thing(cls, arg1, arg2, ...):
        #...
----
or

[source,python]
----
class Utilities:
    @staticmethod
    def do_the_thing(arg1, arg2, ...):
        #...
----

=== Exceptions

Methods which raise or may raise a ``++NotImplementedError++`` are ignored.

ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

=== Message

Make this method static.


'''
== Comments And Links
(visible only on this page)

=== on 20 Apr 2020, 13:20:45 Nicolas Harraudeau wrote:
This rule seems to raise many false positives. It should be reviewed during the next janitoring effort: \https://community.sonarsource.com/t/python-s2325-false-positive-on-functools-cached-property/23250

include::../comments-and-links.adoc[]

endif::env-github,rspecator-view[]
