擅长:python、mysql、java
<p>下面的代码可能有助于澄清名称损坏的原因</p>
<pre><code>class A:
def __mangled(self):
print "Class A name-mangled method"
class B:
def __init__(self):
a = A()
try:
a.__mangled()
except AttributeError:
# an attempt to access a name-mangled method assumes that
# the '_{class_name}' prefix should use 'B' as the class name
print "A instance has no attribute '_B__mangled'"
a._A__mangled()
# prints "Class A name-mangled method"
getattr(a, '_{}__mangled'.format(a.__class__.__name__))()
# same thing, but can be done without knowing the class name
B()
</code></pre>
<p>因此,您可以将<code>self.strategies[i].__on_tick(self.var)</code>更新为:</p>
<pre><code>strat = self.strategies[i]
getattr(strat, '_{}__on_tick'.format(strat.__class__.__name__)(self.var)
</code></pre>
<p>但是,最好不要在<code>__on_tick</code>前面加上双下划线,因为它是在类/实例之外访问的</p>