A typing question
Thomas Passin
list1 at tompassin.net
Sat Oct 29 20:14:12 EDT 2022
On 10/29/2022 1:45 PM, Paulo da Silva wrote:
> Hi!
>
> Consider this simple script ...
>
> ___________________
> from typing import List, Optional
>
> class GLOBALS:
> foos=None
>
> class Foo:
>
> def __init__(self):
> pass
>
> class Foos:
> Foos: List[Foo]=[]
> # SOME GLOBALS ARE USED HERE in a real script
>
> def __init__(self):
> pass
>
> GLOBALS.foos: Optional[Foos]=Foos()
> ___________________
>
> Running mypy on it:
> pt9.py:18: error: Type cannot be declared in assignment to non-self
> attribute
> pt9.py:18: error: Incompatible types in assignment (expression has type
> "Foos", variable has type "None")
> Line 18 is last line and pt9.py is the scrip.
>
> Replacing last line by
> GLOBALS.foos=Foos()
> and running mypy still gives the second error.
> pt9.py:18: error: Incompatible types in assignment (expression has type
> "Foos", variable has type "None")
>
> What is the common practice in these cases?
>
> Thank you.
>
I don't understand
class Foos:
Foos: List[Foo]=[]
If "Foos" is supposed to be a class attribute, then it cannot have the
same name as the class. Perhaps you meant the class to be named "Foo".
Then a class attribute of Foos: List[Foo]=[] might barely make sense.
Even then, remember that each instance of Foo would only know about the
same (originally empty) list Foos. Is that really what you want?
More information about the Python-list
mailing list