no-annotated-self

Forbid explicit type annotations on instance-method self parameters.

Message

Do not annotate self in instance methods.

Valid examples

class A:
    def method(self, value: int) -> int:
        return value
def helper(self: object, value: int) -> int:
    return value
Show more
class A:
    @classmethod
    def build(cls, value: int) -> "A":
        return cls()
class A:
    @classmethod
    def build(self: type["A"]) -> "A":
        return self()
from builtins import classmethod as cm

class A:
    @cm
    def build(self: type["A"]) -> "A":
        return self()
class A:
    @staticmethod
    def helper(self: int) -> None:
        pass
from builtins import staticmethod as sm

class A:
    @sm
    def helper(self: int) -> None:
        pass
import builtins as builtin_values

class A:
    @builtin_values.staticmethod
    def helper(self: int) -> None:
        pass

Invalid examples

class A:
    def method(self: "A", value: int) -> int:
        return value

Suggested fix

class A:
    def method(self, value: int) -> int:
        return value
Show more
class A:
    async def method(self: "A") -> None:
        return None

Suggested fix

class A:
    async def method(self) -> None:
        return None
def outer():
    class A:
        def method(self: "A") -> None:
            pass

Suggested fix

def outer():
    class A:
        def method(self) -> None:
            pass