Python相当于.Net的密封类

发布于 2021-01-29 15:21:36

python有什么与密封类相似的东西吗?我相信它在Java中也称为最终课程。

换句话说,在python中,我们可以标记一个类,使其永远不会被继承或扩展吗?python是否曾经考虑过具有这种功能?为什么?

免责声明

实际上试图理解为什么密封类甚至存在。答案在这里(和很多很多很多很多很多真的很多其他地方)没有满足我的人,所以我试图从不同的角度看。请避免对此问题的理论答案,而要注意标题!或者,如果您坚持要说的话,至少请举
一个 在csharp中使用密封类的非常好且实用的示例,指出如果不密封将破坏大量时间。

我不是这两种语言的专家,但我确实对这两种语言都有一点了解。就在昨天,在使用csharp进行编码时,我了解了密封类的存在。现在我想知道python是否具有与之等效的功能。我相信存在它是有很好的理由的,但是我真的没有。

关注者
0
被浏览
65
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您可以使用元类来防止子类化:

    class Final(type):
        def __new__(cls, name, bases, classdict):
            for b in bases:
                if isinstance(b, Final):
                    raise TypeError("type '{0}' is not an acceptable base type".format(b.__name__))
            return type.__new__(cls, name, bases, dict(classdict))
    
    class Foo:
        __metaclass__ = Final
    
    class Bar(Foo):
        pass
    

    给出:

    >>> class Bar(Foo):
    ...     pass
    ... 
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "<stdin>", line 5, in __new__
    TypeError: type 'Foo' is not an acceptable base type
    

    __metaclass__ = Final条线使Foo班级“密封”。

    请注意,您将在.NET中使用密封类作为性能指标;因为不会有任何子类化方法可以直接解决。Python方法查找的工作方式截然不同,就方法查找而言,使用上面的示例中的元类并没有优点或缺点。



推荐阅读
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看