@stable(as_of="0.4.0")
    def __eq__(self, other):
        # checks ordered from least to most expensive
        if self.__class__ != other.__class__:
            return False

        if not MetadataMixin._eq_(self, other):
            return False

        if self._string != other._string:
            return False

        if not PositionalMetadataMixin._eq_(self, other):
            return False

        return True
before_update is called on parent for collection modifications,
dataset/ETHPy150Open biocore/scikit-bio/skbio/sequence/_sequence.py/Sequence.__eq__--crossover with--dataset/ETHPy150Open zzzeek/sqlalchemy/test/orm/test_events.py/MapperEventsTest.test_before_after_only_collection