On 30/10/2022 14:37, Peter J. Holzer wrote:
On 2022-10-30 09:23:27 -0400, Thomas Passin wrote:
On 10/30/2022 6:26 AM, Peter J. Holzer wrote:
On 2022-10-29 23:59:44 +0100, Paulo da Silva wrote:
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.

Yes. I was referring to the code as written. Why does that work? I don't
think it should.

For me it makes sense. I think mypy should refrain from trying to figure
out order of execution. If the above is disallowed, how about

if random.randrange(2):
    class A: pass

class B(A): pass

?

One interesting consequence of that policy -- take the whole scope
instead of the most recent appearance of a name is that

class A: pass
class A: pass

won't compile.

While I didn't expect that I think I like it ;)

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to