dict.py 文件源码

python
阅读 35 收藏 0 点赞 0 评论 0

项目:metapensiero.reactive 作者: azazel75 项目源码 文件源码
def _change(self, key, oldv, newv):
        """Analyze changed values and trigger changed events on dependencies."""
        if oldv is missing:
            # add
            vdep = EventDependency(tracker=self._tracker)
            self._key_dependencies[key] = vdep
            if self._is_immutable(newv):
                self._all_immutables.follow(vdep)
            else:
                self._follow_reactive(newv, key=key)
            change = (operator.setitem, (self, key, newv))
            vdep.changed(change)
            self._structure.changed(change)
        elif newv is missing:
            # delete
            vdep = self._key_dependencies.pop(key)
            change = (operator.delitem, (self, key))
            vdep.changed(change)
            self._structure.changed(change)
            if self._is_immutable(oldv):
                self._all_immutables.unfollow(vdep)
            else:
                self._follow_reactive(oldv, stop=True)
        else:
            # change
            is_immu = self._is_immutable(newv)
            if oldv is newv or (is_immu and self._equal(oldv, newv)):
                return
            was_reactive = isinstance(oldv, ReactiveContainerBase)
            is_reactive = isinstance(newv, ReactiveContainerBase)

            dep = self._key_dependencies[key]
            if was_reactive:
                self._follow_reactive(oldv, stop=True)
            if is_reactive:
                self._follow_reactive(newv)
            dep.changed((operator.setitem, (self, key, newv)))
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号