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

哪些类别不能被子类别化?

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

哪些类别不能被子类别化?

在Python中,类最终是有两个原因的。

1.违反类别不变式

遵循Singleton模式的类具有不变的数量,即实例数量有限(预定)。子类中对此不变量的任何违反都将与该类的意图不一致,并且将无法正常工作。例子:

  • bool
    True
    False
    ; 参见Guido的评论
  • NoneType
    None
  • NotImplementedType
    NotImplemented
  • ellipsis
    Ellipsis

在此类别中,可能还有Singleton模式以外的情况,但我不知道有任何情况。

2.没有说服力的用例

用C实现的类需要额外的工作才能允许子类化(至少在CPython中)。在没有令人信服的用例的情况下进行此类工作并不是很有吸引力,因此志愿者不太可能挺身而出。例子:

  • function
    ; 见蒂姆·彼得斯的帖子

注1:

我原本以为有合理的用例,但是对

function
和的子类化却没有足够的兴趣
operator.itemgetter
。感谢@agf指出此处和此处提供的用例并不令人信服(请参阅问题的@agf注释)。

笔记2:

我担心的是,另一个Python实现可能会意外地允许继承CPython中最终的类。这可能会导致代码不可移植(用例可能很弱,但是如果某人

function
的Python支持,则仍可能编写子类的代码)。这可以通过在Python文档中标记所有不能被子类化的内置库和标准库类来解决,并要求所有实现都在这方面遵循CPython行为。

注3:

在上述所有情况下,CPython生成的消息是:

TypeError: type 'bool' is not an acceptable base type

正如这个问题上的许多问题所显示的,这是非常神秘的。我将提出一个建议,在说明最终课程的文档中添加一个段落,甚至可能将错误消息更改为:

TypeError: type 'bool' is final (non-extensible)


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

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

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