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