这个问题建立在许多假设之上。如果一个假设是错误的,那么整个事情就完了。我对Python还比较陌生,刚刚进入好奇/探索阶段
据我所知,Python不支持创建不能子类化的类(finalclasses)。然而,在我看来,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
您可以很容易地从Python 3.x模拟相同的效果:
将给出以下输出:
您只能通过C API来实现这一点。清除类型对象的} 位
tp_flags
的^{例如,
bool
不能子类化(cpython-code on github):但是
int
可以(cpython-code on github):因为
Py_TPFLAGS_BASETYPE
-位是在tp_flags
中设置的在Python 3.6中,应该在不使用元类的情况下阻止子类化,如下所示:
在Python 3.8中,还应使用
final
装饰器来引发类型检查错误:类型检查由MyPy之类的程序完成,这是可选的
相关问题 更多 >
编程相关推荐