On 09/14/2017 12:08 PM, Ivan Levkivskyi wrote: > On 14 September 2017 at 01:13, Guido van Rossum 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! :-) For comparison's sake, what would the above look like using __class__ assignment? And what is the performance difference? -- ~Ethan~
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4