dry-python / dry-python/classes

Prevent an implementation for `int` class from operating on `bool` values

Offen
#310 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
Python
Sterne
730
Forks
30
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

**Context.** Consider the following piece of code.

```python
from classes import typeclass

@typeclass
def render(data_value) -> str:
"""Pretty-print a value."""

@render.instance(int)
def _render_int(data_value: int) -> str:
return f'🔢 {data_value}'

render(True) == '🔢 True'
```
*(this should be runnable as-is on `classes 0.4.0`.)*

I would have expected this code to fail with a `NotImplementedError` because the `bool` case wasn't specified; but instead, that case is handled by the `int` implementation because

```pycon
In [3]: issubclass(bool, int)
Out[3]: True
```

**Decision.** In an `int` implementation, recognize if the provided value is actually a `bool` and refuse to process that value.

**Consequences.** I have been writing in Python for quite a few years now and I might even have encountered this relationship between `int` and `bool` types before, but that is not quite a type of thing that I keep in my short-term memory to be able to instantly recognize.

I believe this change can help avert bugs which might be hard to trace otherwise.

Beitragsleitfaden

Beitragsleitfaden öffnen

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.