[mypyc] property setter and deleter don't work with parameterized attributes
Offen
Dieses Issue hat noch niemand übernommen.
bug
topic-descriptors
topic-mypyc
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Bug Report
mypyc fails to compile a class with a property setter and deleter and a weakref attribute.
To Reproduce
- Defined (in a file
foo.py) a classBarwith a property that has a setter and deleter and weakref attribute. - run
mypyc foo.py3.
e.g.
from __future__ import annotations
from typing import TypeVar, Generic
import weakref
T = TypeVar("T")
class Bar(Generic[T]):
_attr: weakref.ReferenceType[T] | None
def __init__(self) -> None:
self._attr = None
@property
def attr(self) -> T | None:
return self._attr() if self._attr is not None else None
@attr.setter
def attr(self, value: T) -> None:
self._attr = weakref.ref(value)
@attr.deleter
def attr(self) -> None:
self._attr = None
Actual Behavior
I get the following error:
File "mypyc/irbuild/classdef.py", line 87, in transform_class_def
File "mypyc/irbuild/classdef.py", line 200, in add_method
File "mypyc/irbuild/function.py", line 369, in handle_ext_method
File "mypyc/irbuild/function.py", line 312, in gen_func_item
File "mypyc/irbuild/function.py", line 351, in gen_func_ir
...: KeyError: <mypy.nodes.FuncDef object at 0x7f93d4876b80>
This error does not occur when setter and deleter are omitted.
Your Environment
- Mypy version used: 0.950
- Mypy command-line flags: N/A
- Mypy configuration options from
mypy.ini(and other config files): N/A - Python version used: 3.9
- Operating system and version: macOS Monterey, version 12.4
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Reproduziere den Fehler mit dem Beispiel foo.py und verfolge dann den gemeldeten Pfad durch mypyc/irbuild/classdef.py und mypyc/irbuild/function.py. Füge Abdeckung für ein parametrisiertes Attribut mit property setter und deleter hinzu und betrachte das Issue als erledigt, wenn mypyc foo.py es ohne den KeyError kompiliert.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- devtools
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 42/100