私は、レイジー評価strのようなクラスを実装しようとしています。 str.join
::私が今持っていることは、1つを除いて、ほとんどの場合、(私の目的のために)正常に動作Pythonのstrをプロキシして結合することはできますか?
class LazyString(object):
__class__ = str
def __init__(self, func):
self._func = func
def __str__(self):
return self._func()
ようsimethingさ
' '.join(['this', LazyString(lambda: 'works')])
は
TypeError: sequence item 1: expected string, LazyString found
そして、いくつかの後で失敗しますそこを突き刺すことは、この背後にある魔法のようなものではないようです。 join
は、コア実装の内部でハードコーディングされているように見える、と限らビルトインタイプの唯一のインスタンスは、それが実際にstr
されることなく動作させることができます。
だから私はここで本当に選択肢のうちの午前、または私は認識していないよ別の方法はありますか?
それは可能ですか? – Ffisegydd
あなたは冒険を感じている場合は、これを使用しないように誓う、とCPythonと、あなたの可能性[モンキーパッチ](https://github.com/clarete/forbiddenfruit) 'str.join'を使用しています。 – Blender
他の状況では、 'join'が引数を文字列に強制的に強制しようとしないという少し面倒です。あなたが望むのはあまり強く型付けされていない言語ですが、もちろんその欠点もあります。 –