this post was submitted on 01 Feb 2024
23 points (100.0% liked)

Python

6337 readers
11 users here now

Welcome to the Python community on the programming.dev Lemmy instance!

📅 Events

PastNovember 2023

October 2023

July 2023

August 2023

September 2023

🐍 Python project:
💓 Python Community:
✨ Python Ecosystem:
🌌 Fediverse
Communities
Projects
Feeds

founded 1 year ago
MODERATORS
 

I often find myself defining function args with list[SomeClass] type and think "do I really care that it's a list? No, tuple or Generator is fine, too". I then tend to use Iterable[SomeClass] or Collection[SomeClass]. But when it comes to str, I really don't like that solution, because if you have this function:

def foo(bar: Collection[str]) -> None:
    pass

Then calling foo("hello") is fine, too, because "hello" is a collection of strings with length 1, which would not be fine if I just used list[str] in the first place. What would you do in a situation like this?

you are viewing a single comment's thread
view the rest of the comments
[–] GammaGames@beehaw.org 1 points 9 months ago* (last edited 9 months ago)

Oh, I had it backwards! I tried to mess with the hint and couldn’t find anything, maybe an assert?

from typing import Collection

def foo(bar: Collection[str]):
    assert not isinstance(bar, str)
    print(bar)