我有一个python对象,从概念上允许通过迭代器和getter访问一个充满字符串的数组。但是,由于计算数组中每个元素的确切值非常昂贵,我正在研究为数组中每个插槽的内容返回一个代理对象,然后在实际需要时实时计算实际值。 / p>
即,我想写一下:
bar = foo.get(10) # just returns a proxy
baz = bar # increase proxy reference
l = [baz] # actually increase proxy reference again.
print baz # ooh, actually need the value. Calculate it only the fly.
v = '%s' % bar # I need the value here again
if bar is None: # I need the value here again
print 'x'
if bar: # I need the value here again
print 'x'
for i in bar: # I need the value here again
print i
在C ++中,我会尝试重新引用解除引用操作符......任何想法?
我理解,对于每种情况,我都可以重载特定的python'魔术'函数(例如__str__
的{{1}}),但我想知道是否:
答案 0 :(得分:1)
在python中,你将返回一个自定义类型,并覆盖__str__()
方法以计算打印时的字符串表示。
class MyCustomType(object):
def __str__(self):
return "My string is really costly to produce"
根据您的用例,您仍在查看python提供的各种钩子:
__getattr__
方法或使用property
进行连接。__getitem__
连接。根据您的使用案例,您必须根据需要决定 ,这时您需要进行昂贵的计算。 Python将让您轻松地在对象的生命周期内连接任何点。