Ho scritto un tipo di contenitore in Python e sto provando a scrivere un robusto metodo __repr__
che gestisce correttamente il caso in cui il contenitore contiene se stesso.Come gestisco recursive repr() in Python?
Per esempio, ecco cosa il built-in list
fa: tipi
>>> x = []
>>> x.append(x)
>>> repr(x)
'[[...]]'
container scritti in C per CPython possono ottenere questa funzionalità utilizzando Py_ReprEnter
e Py_ReprLeave
. Esiste funzionalità equivalenti in pure-Python o devo creare il mio?
Sfortunatamente, devo calcolare la stringa di repr in modo dinamico, quindi non posso dipendere dal built-in repr() nel modo in cui descrivi. Come posso creare un set di istanze thread-local? –
@DanielStutzbach, perché avvolto nel blocco try/finally? – akaRem
@akaRem: 'self.something' è un segnaposto per un lavoro più complesso che coinvolge la ricorsione. In una brutta giornata qualcosa in là potrebbe causare un'eccezione. Se ciò accade, vogliamo assicurarci che la lista di 'reprs' venga cancellata al contrario, altrimenti accumulerà istanze man mano che gli errori si accumulano, causando sempre più' MyThing's da render come 'MyThing (...) 'anche quando non c'è ricorsione. – bobince