<p>首先,介绍python如何比较<a href="https://docs.python.org/3/library/stdtypes.html#common-sequence-operations" rel="nofollow noreferrer">sequences</a></p>
<blockquote>
<p>Sequences of the same type also support comparisons. In particular, tuples and lists are compared lexicographically by comparing corresponding elements. This means that to compare equal, every element must compare equal and the two sequences must be of the same type and have the same length.</p>
</blockquote>
<p>因此,每个元素必须等于另一个序列中对应的元素。如何检查对象的相等性?如果一个对象未实现<a href="https://docs.python.org/3/reference/datamodel.html#object.__eq__" rel="nofollow noreferrer">^{<cd1>}</a>,则该类型的两个对象之间的比较<strong>仅检查两个对象是否完全相同。与中一样,对同一对象的引用-这是<code>is</code>操作符所做的</p>
<pre class="lang-py prettyprint-override"><code>class Foo():
pass
a = Foo()
b = Foo()
print(a is a)
# prints true
print(a is b)
# prints false
</code></pre>
<p>由于<a href="https://het.as.utexas.edu/HET/Software/PyQt/qpropertyanimation.html" rel="nofollow noreferrer">^{<cd3>}</a>没有实现<code>__eq__</code>,因此只能执行<code>is</code>检查。这显然会导致不同对象引用的错误</p>
<p>如果愿意,可以扩展<code>QPropertyAnimation</code>并实现自己的<code>__eq__</code>-</p>
<pre class="lang-py prettyprint-override"><code>class MyQPropertyAnimation(QPropertyAnimation):
def __eq__(self, other):
if not isinstance(other, QPropertyAnimation):
# Don't compare against other types
return NotImplemented
# Check if the properties `target` and `propertyName` are equal for both objects
return self.target == other.target and self.propertyName == other.propertyName
</code></pre>
<p>但请注意,为动画对象实现相等可能并不理想。但是,如果您严格地希望基于这些属性的相等性用于您的用例,那么这可能很好</p>