小编典典

Python 3.x中的最终课程-Guido没告诉我什么?

python

这个问题是建立在许多假设之上的。如果一个假设是错误的,那么整个事情就倒塌了。我对Python还是比较陌生,刚刚进入好奇/探索阶段。

据我了解,Python不支持无法创建子类的类( 最终 类)的创建。但是,在我看来,Python中的 bool
类不能被子类化。当考虑到bool类的意图时这是有道理的(因为bool仅应具有两个值:true和false),对此我感到满意。我想知道的是该班级 如何
被标记为期末。

所以我的问题是: Guido如何精确地防止bool的子类化?

>>> class TestClass(bool):
        pass

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    class TestClass(bool):
TypeError: type 'bool' is not an acceptable base type

阅读 171

收藏
2020-12-20

共1个答案

小编典典

您可以很容易地从Python 3.x模拟相同的效果:

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 C(metaclass=Final): pass

class D(C): pass

将给出以下输出:

Traceback (most recent call last):
  File "C:\Temp\final.py", line 10, in <module>
    class D(C): pass
  File "C:\Temp\final.py", line 5, in __new__
    raise TypeError("type '{0}' is not an acceptable base type".format(b.__name__))
TypeError: type 'C' is not an acceptable base type
2020-12-20