擅长:python、mysql、java
<p>是的,但是您实际上需要重写您希望它使用的任何方法。在</p>
<p>当您对像列表这样的对象调用某些运算符时,您最终会对这些对象调用隐藏方法。在您给出的示例<code>result = list1 + list2</code>中,实际调用的函数是<code>list1.__add__(list2)</code>。如果需要,可以将<code>list</code>子类化并重写这些方法。例如:</p>
<pre><code>class CustomList(list):
def __add__(self, value):
if len(self) == 1 and len(value) == 1:
return self[0] + value[0]
else:
return CustomList(list.__add__(self, value))
</code></pre>
<p>如果<code>list1</code>和{<cd5>}的长度都为1,则将它们视为标量,否则将引用正常的<code>list</code>功能。<a href="https://stackoverflow.com/questions/8180014/how-to-subclass-python-list-without-type-problems/8180073#8180073">This stackoverflow answer on subclassing ^{<cd3>}</a>可能对你有帮助。在</p>
<hr/>
<p>为了解决您的编辑问题,一个更通用的解决方案相当简单-不要重写<code>__add__()</code>函数,而是尝试重写<code>__getitem__()</code>,每当使用方括号运算符时都会调用它:</p>
^{pr2}$
<p>但是,当尝试连接数组时,这可能会导致问题;<code>list3 + list1</code>会导致错误,因为<code>list1</code>不是iterable,当然,如果列表的长度超过一个元素,则可以重写<code>__add__</code>来简单地添加第二个值作为列表元素。在</p>
<hr/>
<p>使用上述声明的控制台输出:</p>
^{3}$