擅长:python、mysql、java
<p>你可以先定义一个函数,然后修补它。你知道吗</p>
<p>比如:</p>
<pre><code>def foostr(self):
return 'A foo str'
Foo.__str__ = foostr</code></pre>
<p>或使用λ表达式:</p>
<pre><code>Foo.__str__ = lambda self: 'Another foo str'</code></pre>
<p>不过,这个方法的<code>Foo.__str__.__name__</code>等不同,但<code>str(..)</code>内置函数将按预期工作。我们可以使用cd4的大部分元数据:</p>
<pre><code>from functools import wraps
def foostr(self):
return 'A foo str'
Foo.__str__ = wraps(Foo.__str__)(foostr)</code></pre>
<p>但是<code>Foo.__str__.__qualname__</code>将导致<code>'superfoo.__str__'</code>(例如,<code>superfoo</code>实现<code>Foo</code>的<em>方法解析顺序(MRO)</em>中的第一个类)。你知道吗</p>
<p>例如:</p>
<pre><code>>>> class Foo:
... pass
...
>>> str(Foo())
'<__main__.Foo object at 0x7f807046e668>'
>>> Foo.__str__ = lambda self: 'another Foo str'
>>> str(Foo())
'another Foo str'
</code></pre>
<p>如果您有权访问<code>Foo</code>类的实现,那么最好只在类中定义一个<code>__str__</code>函数,而不是在以后的过程中定义它。你知道吗</p>