Tembel olarak değerlendirilmiş str benzeri bir sınıfı uygulamaya çalışıyorum. str.join
: Şimdi ne var biri hariç, çoğu durumda (benim amaçlar için) çalışıyorBir Python str'i proxy yapmak ve işe katılmak mümkün mü?
class LazyString(object):
__class__ = str
def __init__(self, func):
self._func = func
def __str__(self):
return self._func()
gibi simething edilir
' '.join(['this', LazyString(lambda: 'works')])
TypeError: sequence item 1: expected string, LazyString found
Ve bazı sonra başarısız olur Etrafında dolaşmak, arkasındaki herhangi bir sihir fonksiyonu gibi görünmüyor. join
, çekirdek uygulamasında sabit kodlanmış gibi görünüyor ve yalnızca sınırlı yerleşik türdeki örnekler, aslında str
olmaksızın çalışmasını sağlayabilir.
Bu yüzden burada gerçekten seçeneklerim yok mu, yoksa farkında olmadığım başka bir yol var mı?
Dizeyi alt sınıflara ayırmanız ve daha sonra ihtiyacınız olan şey için ayarlamanız mümkün mü? – Ffisegydd
Macera dolu hissediyorsanız, bunu asla kullanmamaya yemin edin ve CPython'u kullanıyorsunuz, [maymun yama] (https://github.com/clarete/forbiddenfruit) str.join'. – Blender
Hafifçe rahatsız edici başka durumlar da vardır: 'katıl' argümanlarını dizgilere zorlamaya çalışmaz. İstediğiniz, daha az yazılan bir dildir, ama elbette onun dezavantajları vardır. –