Skip to content

[SIM119] Detect potential dataclasses #37

@MartinThoma

Description

@MartinThoma

Explanation

Dataclasses were introduced with PEP 557. Data Classes can be thought of as "mutable namedtuples with defaults".

Dataclasses should be used when the primary focus is to store data.

Dataclasses help, because they have a good __str__ and __eq__ implementation and you don't have to write __init__.

Example

# Bad
class Person:
    def __init__(self, first_name, last_name, birthdate):
        self.first_name = first_name
        self.last_name = last_name
        self.birthdate = birthdate


# Good
from dataclasses import dataclass
from datetime import date


@dataclass
class Person:
    first_name: str
    last_name: str
    birthdate: date

As an example why dataclasses are nice:

p11 = Person1("Bob", "Builder", date(2000, 1, 3))
p12 = Person1("Bob", "Builder", date(2000, 1, 3))
p21 = Person2("Bob", "Builder", date(2000, 1, 3))
p22 = Person2("Bob", "Builder", date(2000, 1, 3))

print(p11)
print(p11 == p12)
print("-" * 80)
print(p21)
print(p21 == p22)

gives:

<__main__.Person1 object at 0x7f3f8a32aac0>
False
--------------------------------------------------------------------------------
Person2(first_name='Bob', last_name='Builder', birthdate=datetime.date(2000, 1, 3))
True

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions