gpt4 book ai didi

python - Python 3.x 中的 final类——Guido 没有告诉我什么?

转载 作者:IT老高 更新时间:2023-10-28 21:59:46 27 4
gpt4 key购买 nike

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

据我了解,Python 不支持创建不能被子类化的类(final 类)。但是,在我看来,Python 中的 bool 类不能被子类化。当考虑 bool 类的意图时,这是有道理的(因为 bool 只应该有两个值:true 和 false),我对此很满意。我想知道的是如何这个类被标记为final。

所以我的问题是: 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

相关问题: Why I can't extend bool in Python?

最佳答案

您可以很容易地从 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

关于python - Python 3.x 中的 final类——Guido 没有告诉我什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2825364/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com