Allow to use function objects as singletons
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 1.8k
- Forks
- 302
- Merge medio
- 23 h
- PR fusionados (30 d)
- 8
Descripción
I was trying to create some stubs for lxml library, but I encountered a function that depending on a function object it gets (as in specific function object - checked with identity check) only finds objects of specific type.
Here's a very simplified mock-up of it so that you can get some idea on what I mean (the typing for arg argument in the find function is incorrect and that's what I want to be able to type hint in some way):
from typing import Union
class _Element: ...
def Element() -> _Element: ...
class _Comment: ...
def Comment() -> _Comment: ...
def find(arg: Union[Element, Comment]) -> Union[_Element, _Comment]:
if arg is Element:
# only find _Element objects
elif arg is Element:
# only find _Comment objects
# this function should only accept `Element` and `Comment` function object
find(arg=Element)
So basically those functions serve as a singletons. Unfortunately typing.Union only allows Enums to work as singletons.
I am not entirely sure if this should be supported, usually the code could just be adjusted to use Enums, but in this case it will be used for type stubs so the code can't be edited. And to be honest, I am not sure if the code really needs editing in that case as if I didn't need typing for that library, I would say it's actually quite intuitive to use these factory functions as arguments in this case.
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza con el ejemplo de singleton mediante una función-fábrica y la comparación con los singletons de Enum en el issue #668. Como en el issue no se nombran archivos de implementación ni tests, primero identifica dónde typing representa valores singleton y cómo se gestionan actualmente los objetos función. Se considera terminado establecer si estos objetos función pueden aceptarse y representarse de forma diferenciada en las sugerencias de tipo, con cobertura para el caso de estilo Element/Comment.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- developer-experience
- Tipo de issue
- Nueva funcionalidad
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 30/100