Fwd: A typing question

Thomas Passin list1 at tompassin.net
Sun Oct 30 09:23:27 EDT 2022


On 10/30/2022 6:26 AM, Peter J. Holzer wrote:
> On 2022-10-29 23:59:44 +0100, Paulo da Silva wrote:
>> Às 22:34 de 29/10/22, dn escreveu:
>>> Solution (below) will not work if the mention of Foos in GLOBALS is a
>>> forward-reference.
>>> Either move GLOBALS to suit, or surround "Foos" with quotes.
>                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>> This is the problem for me.
> 
> Quotes are a bit ugly, but why are they a problem?
> 
> [...]
> 
>> The funny thing is that if I replace foos by Foos it works because it gets
>> known by the initial initialization :-) !
>>
>> ________________________
>> from typing import List, Optional
>>
>> class GLOBALS:
>>      Foos: Optional[Foos]=None
> [...]
>> class Foos:
> 
> That seems like a bug to me. What is the «Foos» in «Optional[Foos]»
> referring to?
> 
> If it's the class attribute «Foos» then that's not a type and even if
> its type is inferred that's not the same as «Optional[it's type]», or is
> it?
> 
> If it's referring to the global symbol «Foos» (i.e. the class defined
> later) that hasn't been defined yet, so it shouldn't work (or
> alternatively, if forward references are allowed it should always work).

Quoting a forward-referenced type is the way to use one.  Unquoted types 
need to have been declared already.




More information about the Python-list mailing list