擅长:python、mysql、java
<p>如果你不把论点和可调用的分开,我认为这是不可能的。但是,这应该是有效的:</p>
<pre><code>class MySettingsDict(dict):
def __getitem__(self, item):
function, arg = dict.__getitem__(self, item)
return function(arg)
def expensive_to_compute(arg):
return arg * 3
</code></pre>
<p>现在:</p>
^{pr2}$
<p>编辑:</p>
<p>如果要多次访问<code>expensive_to_compute</code>的结果,则可能还需要缓存这些结果。像这样的东西</p>
<pre><code>class MySettingsDict(dict):
def __getitem__(self, item):
value = dict.__getitem__(self, item)
if not isinstance(value, int):
function, arg = value
value = function(arg)
dict.__setitem__(self, item, value)
return value
</code></pre>
<p>现在:</p>
<pre><code>>>> settings.values()
dict_values([(<function expensive_to_compute at 0x9b0a62c>, 2),
(<function expensive_to_compute at 0x9b0a62c>, 1)])
>>> settings['expensive1']
3
>>> settings.values()
dict_values([(<function expensive_to_compute at 0x9b0a62c>, 2), 3])
</code></pre>
<p>根据您希望如何使用dict,您可能还希望重写其他<code>dict</code>方法</p>