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