3.4. ADR Dragon Create Name
EN: Create dragon named "Wawelski"
PL: Smok przy tworzeniu musi mieć nadane imię
3.4.1. Option 1
>>> dragon = Dragon('Wawelski')
Good:
Code is readable
Easy to use
Easy to understand
Bad:
Less verbose than keyword arguments
Decision:
Candidate
3.4.2. Option 2
>>> dragon = Dragon(name='Wawelski')
Good:
Code is readable
Easy to use
Easy to understand
More verbose than positional arguments
Bad:
Too verbose for such simple example
Decision:
Rejected, too verbose for such simple case
3.4.3. Option 3
>>> dragon = Dragon()
>>> dragon.name = 'Wawelski'
Good:
Code is readable
Easy to use
Can add validation if needed (
property()
)
Bad:
Requires knowledge of an API
Violates encapsulation (OOP Principle)
Decision:
Rejected, violates encapsulation
3.4.4. Option 4
>>> dragon = Dragon()
>>> dragon.set_name('Wawelski')
Good:
Code is readable
Can use for validation if needed
Bad:
Not a Python convention (Setter method)
Requires knowledge of an API
Overkill for such simple case
Decision:
Rejected, overkill for such simple case
3.4.5. Option 5
>>> dragon = (
... Dragon()
... .with_name('Wawelski')
... )
Good:
Extensible
Can use for validation if needed
Bad:
Not a Python convention (Builder design pattern)
Requires knowledge of an API
Overkill for such simple case
Decision:
Rejected, overkill for such simple case
3.4.6. Decision
>>> dragon = Dragon('Wawelski')
Rationale:
Readable
Easy to use
Easy to understand
Verbose enough
Implementation:
>>> class Dragon:
... name: str
...
... def __init__(self, name: str, /) -> None: ...