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

将self .__ class__设置为其他东西有多危险?

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

将self .__ class__设置为其他东西有多危险?

这是我能想到的导致危险的列表,从最坏到最坏的顺序排列:

  • 这可能会使阅读或调试您的代码的人感到困惑。
  • 您将没有正确的
    __init__
    方法,因此您可能不会正确初始化(甚至根本不)初始化所有实例变量。
  • 2.x和3.x之间的差异非常明显,以至于移植起来可能很痛苦。
  • 在某些情况下,类方法,手工编码的描述符,方法解析顺序的钩子等等,在经典类和新型类之间(以及在2.x和3.x之间),它们是不同的。
  • 如果使用
    __slots__
    ,则所有类都必须具有相同的插槽。(并且,如果您具有兼容但不同的插槽,则乍一看似乎可以正常工作,但是却做得很糟糕……)
  • 新型类中的特殊方法定义可能不会更改。(实际上,这将在实践中与所有当前的Python实现一起使用,但是没有 文档记录 ,因此……)
  • 如果使用
    __new__
    ,事情将不会像您天真的预期那样工作。
  • 如果这些类具有不同的元类,那么事情将变得更加混乱。

同时,在许多您认为有必要的情况下,还有更好的选择:

  • 使用工厂动态创建适当类的实例,而不是创建基础实例,然后将其装入派生实例。
  • 使用
    __new__
    或其他机制来钩住构造。
  • 重新设计事物,使您拥有一个具有某些数据驱动行为的单一类,而不是滥用继承。

作为最后一个最常见的特定情况,只需将所有“变量方法”放入其实例作为“父”数据成员保存的类中,而不是子类中即可。不要改变

self.__class__ =OtherSubclass
,而要做
self.member =OtherSubclass(self)
。如果您确实需要进行神奇更改的方法,那么自动转发(例如via
__getattr__
)比动态更改类更为常见和Python化。



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

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

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