ensure classes have an __init__ method

This page is not yet available in Spanish. We are working on its translation.
If you have any questions or feedback about our current translation project, feel free to reach out to us!

Metadata

ID: python-best-practices/init-method-required

Language: Python

Severity: Notice

Category: Best Practices

Description

Ensure that a class has an __init__ method. This check is bypassed when the class is a data class (annotated with @dataclass).

Non-Compliant Code Examples

class Foo:  # need to define __init__
	def foo(bar):
		pass
	def bar(baz):
		pass

Compliant Code Examples

# dataclass do not require an init class
@dataclass
class Requests:
    cpu: float  # expressed in cpu cores
    memory: int  # expressed in bytes

    @staticmethod
    def from_pod(pod: V1Pod):
        cpu = 0.0
        memory = 0

        for container in pod.spec.containers:
            cpu += parse_cpu_string(container.resources.requests["cpu"])
            memory += parse_memory_string(container.resources.requests["memory"])

        return Requests(cpu, memory)

    def add(self, other):
        self.cpu += other.cpu
        self.memory += other.memory


@frozen
class AnotherClass:
    cpu: float
    memory: int
    def add(self, other):
        self.cpu += other.cpu
        self.memory += other.memory
class Child(Parent):
  def fn():
      pass

class AnotherChild(modname.Parent):
  def another_fn():
    pass
class UserLoginTest(TestCase):
    def setUp(self):
        self.username = 'testuser'
        self.password = 'testpassword'
        self.user = User.objects.create_user(username=self.username, password=self.password)

    def test_correct_credentials(self):
        user = authenticate(username=self.username, password=self.password)
        self.assertIsNotNone(user)
        self.assertEqual(user, self.user)

    def test_incorrect_credentials(self):
        user = authenticate(username=self.username, password='wrongpassword')
        self.assertIsNone(user)
from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

    dependencies = [
    ]

    operations = [
    ]
@dataclass
class Foo:  # no __init__ required for dataclass
	value = 51
class Foo:
	def __init__(self):
		pass
https://static.datadoghq.com/static/images/logos/github_avatar.svg https://static.datadoghq.com/static/images/logos/vscode_avatar.svg jetbrains

Seamless integrations. Try Datadog Code Analysis