是否可以代理Python str并使连接工作?

ura*_*sjr 6 python

我正在尝试实现一个懒惰评估的str类.我现在所拥有的就像是一样

class LazyString(object):

    __class__ = str

    def __init__(self, func):
        self._func = func

    def __str__(self):
        return self._func()
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,它可以正常工作(除了我的目的),除了一个str.join:

' '.join(['this', LazyString(lambda: 'works')])
Run Code Online (Sandbox Code Playgroud)

失败了

TypeError: sequence item 1: expected string, LazyString found
Run Code Online (Sandbox Code Playgroud)

经过一番探索后,似乎没有任何神奇的功能.join似乎在核心实现中是硬编码的,只有有限的内置类型的实例可以使它工作而不是实际的str.

那么我真的没有选择,或者还有其他我不知道的方式吗?

use*_*ica 3

join接受字符串,所以给它字符串:

' '.join(map(str, ['this', LazyString(lambda: 'works')]))
Run Code Online (Sandbox Code Playgroud)

Python 不支持您正在寻找的那种透明的惰性求值。如果您想强制评估惰性对象,则必须显式执行此操作,而不是在需要时自动完成。有时,Python 会调用您可以依赖的对象的某些方法,例如__nonzero__如果您想要一个惰性布尔值,但并非总是如此,并且您通常无法实现完全的互操作性。