On 14 September 2017 at 01:13, Guido van Rossum <[email protected]> wrote:
>
> That last sentence is a key observation. Do we even know whether there are
> (non-toy) things that you can do *in principle* with __class__ assignment
> but which are too slow *in practice* to bother? And if yes, is __getattr__
> fast enough? @property?
>
>
I myself have never implemented deprecation warnings management nor lazy
loading,
so it is hard to say if __class__ assignment is fast enough. For me it is
more combination
of three factors:
* modest performance improvement
* some people might find __getattr__ clearer than __class__ assignment
* this would be consistent with how stubs work
> IMO we're still looking for applications.
>
>
How about this
def allow_forward_references(*allowed):
caller_globals = sys._getframe().__globals__
def typing_getattr(name):
if name in allowed:
return name
raise AttributeError(...)
caller_globals.__getattr__ = typing_getattr
from typing_extensions import allow_forward_references
allow_forward_references('Vertex', 'Edge')
T = TypeVar('T', bound=Edge)
class Vertex(List[Edge]):
def copy(self: T) -> T:
...
class Edge:
ends: Tuple[Vertex, Vertex]
...
Look mum, no quotes! :-)
--
Ivan
_______________________________________________
Python-Dev mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com