Próbuję zaimplementować leniwy-oceniany klasy podobne do str-like. Co mam teraz jest simething jakCzy możliwe jest proxy serwera Python i łączenie się?
class LazyString(object):
__class__ = str
def __init__(self, func):
self._func = func
def __str__(self):
return self._func()
która działa w porządku (do moich celów), w większości przypadków, z wyjątkiem jednego: str.join
:
' '.join(['this', LazyString(lambda: 'works')])
nie z
TypeError: sequence item 1: expected string, LazyString found
i po pewnym szturchanie tam nie wydaje się być żadnymi magicznymi funkcjami dostępnymi za tym. join
wydaje się być zakodowany wewnątrz podstawowej implementacji, a tylko instancje o ograniczonym wbudowanym typie mogą sprawić, że będzie działał bez bycia numerem str
.
Więc nie mam tu żadnych opcji, czy jest inny sposób, o którym nie wiem?
Czy możliwe jest podciągnięcie łańcucha podklas, a następnie dostosowanie go do tego, czego potrzebujesz? – Ffisegydd
Jeśli czujesz się żądny przygód, przysięgnij, że nigdy tego nie używasz i używasz CPython, możesz [małpa-łatka] (https://github.com/clarete/forbiddenfruit) 'str.join'. – Blender
Istnieją inne sytuacje, w których jest nieco irytujące, że 'join' nie próbuje przymuszać swoich argumentów do łańcuchów. To, czego chcesz, to język, który jest słabiej napisany, ale ma też swoje wady. –