dry-python / dry-python/classes

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

Đang mở
#310 1 bình luận 0 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
Python
Star
730
Fork
30
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

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

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.