dry-python / dry-python/classes

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

Ouverte
#310 1 commentaire 0 réactions 0 personnes assignées Voir sur GitHub
Langage dominant
Python
Étoiles
730
Forks
30
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

**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.

Guide de contribution

Ouvrir le guide de contribution

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.