在Python中,如何禁止类继承?
可能重复:在Python中,如何禁止类继承?,python,Python,可能重复: 我在看一个演讲(),里面有这样一句话,字面意思是“为继承设计和编写文档,否则禁止它”。该演讲以Java为例,其中有“final”关键字用于禁止子类化。可以禁止Python中的子类化吗?如果是的话,最好能看到一个例子。。。 谢谢。在我看来,类通常不应该有任何子类限制。我想建议第三种选择:在类的文档中添加一条注释,说明该类不是子类 没有Python关键字-它不是Pythonic 类是否可以被子类化由一个名为的标志决定,该标志可以通过C API设置 当该类型可用作其他类型的基本类型时,设
我在看一个演讲(),里面有这样一句话,字面意思是“为继承设计和编写文档,否则禁止它”。该演讲以Java为例,其中有“final”关键字用于禁止子类化。可以禁止Python中的子类化吗?如果是的话,最好能看到一个例子。。。
谢谢。在我看来,类通常不应该有任何子类限制。我想建议第三种选择:在类的文档中添加一条注释,说明该类不是子类 没有Python关键字-它不是Pythonic 类是否可以被子类化由一个名为的标志决定,该标志可以通过C API设置 当该类型可用作其他类型的基本类型时,设置此位。如果该位是清除的,则无法对该类型进行子类型化(类似于Java中的“final”类) 但是,如果愿意,您可以仅使用Python代码模拟行为:
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
现在我只需发布几分钟前我在问相关问题时刚刚读到的链接:好的,你可以。但你不应该这样做,以免违反所有习惯用法,激怒所有Python用户。@delnan-我只是想知道我是否能做到。这可能是最好的方法。“我们都是同意的成年人”谢谢,我想这就是我想要的。另外,我也在搜索类似的问题,但没有找到任何东西,所以我发布了这个问题。我不知道在哪一版本的Python中可以使用C类的语法,但我不得不在2.5版中更改为:class C(object):metaclass=Final以使其工作。我希望人们停止使用“it's not Pythonic”作为尚未实施的事情的借口@PierreThibault:OP的答案是Python3元类语法,你的答案是Python2。