Prevent an implementation for `int` class from operating on `bool` values
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Anfängerfreundlichkeit
- 45/100
Rechercherichtung
Beginne damit, das Beispiel mit classes 0.4.0 zu reproduzieren, und verfolge dann den Dispatch von der Typeclass-Deklaration und der Registrierung von render.instance(int) aus. Als abgeschlossen gilt es, wenn render(True) nicht mehr die int-Implementierung verwendet, sondern stattdessen für den nicht spezifizierten bool-Fall NotImplementedError auslöst.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Context. Consider the following piece of code.
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
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.
- Vorherrschende Sprache
- Python
- Sterne
- 730
- Forks
- 30
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beitragsleitfaden
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus dry-python/classes
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 35/100
dry-python/classes#496 ·
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 45/100
dry-python/classes#494 ·
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 52/100
dry-python/classes#492 · 2 Kommentare ·
-
bug
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 35/100
dry-python/classes#481 · 5 Kommentare · 4 Reaktionen ·
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 35/100
dry-python/classes#386 ·
Alle Issues in dry-python/classes
Ähnliche Issues
-
area: harness bug status: needs-triage
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
Human-Agent-Society/reef#625 ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 80/100
learningequality/kolibri#15351 · 2 Kommentare ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
-
Name consistency Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
eellak/triplestore#65 · 1 Kommentar ·