python / python/mypy

False positive in case of custom __setattr__ that changes the type of the attribute

Aperta
#13,071 0 commenti 1 reazione 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

feature
Lingua principale
Python
Stelle
20.6k
Fork
3.3k
Metriche di merge delle PR
Metriche PR in attesa

Descrizione

Bug Report

I have a class with a custom __setattr__(self, attr, value:TYPE). This method converts value to another type.
I am getting false positives, since mypy assumes that for each particular TYPE, type(getattr(obj, attr)) == TYPE.

To Reproduce
Minimal code example:

from typing import *

class Context:
    def __setattr__(self, attr:str, value:Any):
        super().__setattr__(attr, str(value))

ctx = Context()
ctx.a = 10
print(len(ctx.a))

Actual Behavior

mypy output

....py:9: error: "Context" has no attribute "a"
....py:9: error: Argument 1 to "len" has incompatible type "int"; expected "Sized"

I would like to tell mypy that for this class, it mustn't assume that type(getattr(ctx, "a")) == type(10) .

Your Environment

  • mypy 0.961 (compiled: yes) on Ubuntu Linux (Jupyter Docker image)
  • Python 3.8.10 (Anaconda)

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia eseguendo l’esempio minimo di Context con mypy e confronta gli errori segnalati con il comportamento previsto descritto nell’issue. Traccia il percorso del controllo dei tipi per setattr personalizzato e gli attributi inferiti; il lavoro è completato quando l’esempio non produce più falsi positivi per il tipo di attributo convertito.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
python
Ambito
devtools
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.