My question is different because I made a mistake using type hint.
I found a weird type hinging in pycharm:
Example
is my own class. But I guess this is less important because the IDE is complaining about list
type does not define __getitem__
method which is no true. I'm wondering if it's a bug or I used it in a wrong way.
Type hints improve IDEs and linters. They make it much easier to statically reason about your code. Type hints help you build and maintain a cleaner architecture. The act of writing type hints forces you to think about the types in your program.
Here's how you can add type hints to our function: Add a colon and a data type after each function parameter. Add an arrow ( -> ) and a data type after the function to specify the return data type.
Type hints work best in modern Pythons. Annotations were introduced in Python 3.0, and it's possible to use type comments in Python 2.7. Still, improvements like variable annotations and postponed evaluation of type hints mean that you'll have a better experience doing type checks using Python 3.6 or even Python 3.7.
According to official PEP to denote list of objects you should use typing.List
, not list
builtin.
from typing import List
class Something:
pass
def f(seq: List[Something]): # no warning
for o in seq:
print(o)
Update January 2021:
Please note that built-in generics were implemented in Python 3.9, as described in PEP585
.
Łukasz explained how to correct your code. I'll explain why the error message says what it does.
list
defines __getitem__
, true, but that isn't what the error message is complaining about. The error message is saying that type
itself, which is the list
type's type, doesn't support __getitem__
. For list[whatever]
to be valid, type
would have to define a __getitem__
method, not list
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With