org.sonar.l10n.py.rules.python.S5719.html Maven / Gradle / Ivy
This rule raises an issue when an instance or a class method does not have at least one positional parameter.
Why is this an issue?
Every instance method is expected to have at least one positional parameter. This parameter will reference the object instance on which the method
is called. Calling an instance method which doesn’t have at least one parameter will raise a TypeError
. By convention, this first
parameter is usually named self
.
Class methods, i.e. methods annotated with @classmethod
, also require at least one parameter. The only differences is that they will
receive the class itself instead of a class instance. By convention, this first parameter is usually named cls
.
Exceptions
Static methods (methods annotated with the @staticmethod
decorator) do not require any positional parameter. This rule will not raise
an issue on them.
How to fix it
Adding self
as the first parameter of an instance method or cls
as the first parameter of a class method will resolve the
issue.
Code examples
Noncompliant code example
class MyClass:
def instance_method(): # Noncompliant: "self" parameter is missing.
print("instance_method")
@classmethod
def class_method(): # Noncompliant: "cls" parameter is missing.
print("class_method")
Compliant solution
class MyClass:
def instance_method(self):
print("instance_method")
@classmethod
def class_method(cls):
print("class_method")
@staticmethod
def static_method():
print("static_method")
Pitfalls
Note that __new__
and __init_subclass__
take a class as first argument even thought they are not decorated with
@classmethod
.
Resources
Documentation
- Method Objects - Python Method Objects
- Class Method - Python Class Method