栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

我可以通过交换__dict__来有效地交换两个类实例吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

我可以通过交换__dict__来有效地交换两个类实例吗?

如果我理解正确,那么您实际上是在交换一个类的实例,而不是类。

实例状态保存在两个可能的位置:

__slots__
和中
__dict__
。如果交换它们,则基本上交换了实例,同时保留了原始名称绑定。一个警告是,该类
不能 是不变的(必须不定义
__hash__()
),因为任何已经是集合成员或字典中键的实例都将变得不可检索。

如果是我,我想我应该将.swap()方法改为一个类方法-我认为它将更容易阅读:

class SomeBigClass():    @staticmethod    def swap_dict(instance_a, instance_b):        instance_a.__dict__, instance_b.__dict__ =      instance_b.__dict__, instance_a.__dict__    @classmethod    def swap_slot(cls, instance_a, instance_b):        values = []        for attr in cls.__slots__: values.append(     (attr,      getattr(instance_a, attr),      getattr(instance_b, attr),      ))        for attr, val1, val2 in values: setattr(instance_a, attr, val2) setattr(instance_b, attr, val1)

然后再

SomeBigClass.swap_dict(this_instance, other_instance)

要么

SomeBigClass.swap_slot(this_instance, other_instance)

你为什么不这样做呢?如果您有实例绑定到名称,则不应这样做。考虑:

frubbah = SomeBigClass(attr="Hi, Mom!")zikroid = SomeBigClass(attr='Hi, Dad!")SomeBigClass.swap_dict(frubbah, zikroid)

交换之后,您认为自己对zikroid所了解的一切可能都已改变。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/661815.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号