functools.partialmethod not supported properly?
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 20.6k
- Forks
- 3.3k
- Métricas de merge de PR
- Métricas de PR pendientes
Descripción
- Are you reporting a bug, or opening a feature request?
Bug
- Please insert below the code you are checking with mypy.
import operator
from functools import partialmethod
class IntCmp:
def __init__(self, value):
self._value = value
def _cmp(self, opr, other: int) -> bool:
if isinstance(other, int):
return opr(self._value, other)
return NotImplemented
__eq__ = partialmethod(_cmp, operator.eq) # Incompatible types in assignment (expression has type "partialmethod[bool]", base class "object" defined the type as "Callable[[object, object], bool]")
__ne__ = partialmethod(_cmp, operator.ne) # Incompatible types in assignment (expression has type "partialmethod[bool]", base class "object" defined the type as "Callable[[object, object], bool]")
# rest of the comparison operators (lt, le, gt, ge) type checks correctly
c = IntCmp(1)
assert c == 1 # Cannot determine type of '__eq__'
- What is the actual behavior/output?
MyPy reports an error on the comparison, saying Cannot determine type of '__eq__', as well as incompatible types on assignment as shown.
The code correctly passes at runtime.
- What is the behavior/output you expect?
__eq__ and __ne__ should correctly type-check the partialmethod, and comparison should give no error. This particular partialmethod usage is shown in Python docs: https://docs.python.org/3/library/functools.html#functools.partialmethod
- What are the versions of mypy and Python you are using?
Do you see the same issue after installing mypy from Git master?
Using latest git master, Python 3.8.1
- What are the mypy flags you are using? (For example --strict-optional)
--follow-imports=silent
--show-column-numbers
--ignore-missing-imports
--check-untyped-defs
EDIT: I am aware of #2967 and #1484 being a thing, however this covers partialmethod usage which wasn't mentioned as a topic in the two other issues.
Guía de contribución
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
Empieza ejecutando mypy sobre el fragmento de Python proporcionado y rastrea cómo partialmethod gestiona eq y ne. No se nombra ningún archivo ni prueba en el issue; se considera hecho cuando tanto las asignaciones como la comparación pasan la comprobación de tipos sin errores, mientras el comportamiento en tiempo de ejecución permanece sin cambios.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- devtools
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 42/100