Sto provando ad implementare una classe str-like valutata pigra. Quello che ho ora è simething comeÈ possibile eseguire il proxy di uno str di Python e far funzionare il join?
class LazyString(object):
__class__ = str
def __init__(self, func):
self._func = func
def __str__(self):
return self._func()
che funziona bene (per i miei scopi) nella maggior parte dei casi, tranne uno: str.join
:
' '.join(['this', LazyString(lambda: 'works')])
fallisce con
TypeError: sequence item 1: expected string, LazyString found
E dopo un po ' curiosando non sembra esserci alcuna funzione magica disponibile dietro questo. join
sembra essere codificato all'interno dell'implementazione principale e solo le istanze di tipo limitato incorporato possono farlo funzionare senza effettivamente essere uno str
.
Quindi sono davvero fuori dalle opzioni qui, o c'è un altro modo di cui non sono a conoscenza?
È possibile per voi creare una sottoclasse di stringa e quindi regolarla per ciò che è necessario? – Ffisegydd
Se ti senti avventuroso, giura di non usare mai questo, e stai usando CPython, potresti [patch-scimmia] (https://github.com/clarete/forbiddenfruit) 'str.join'. – Blender
Ci sono altre situazioni in cui è leggermente fastidioso che 'join' non tenti di forzare i suoi argomenti alle stringhe. Quello che vuoi è un linguaggio meno fortemente tipizzato, ma ovviamente ha anche i suoi svantaggi. –