我在看一个演讲(如何设计一个好的API以及为什么它很重要),其中说,“为了继承而设计和文档,否则禁止它”。本文以Java为例,其中包含“final”关键字,用于禁止子类化。是否可以禁止Python中的子类?如果是,很高兴看到一个例子..。谢谢。
发布于 2010-10-16 05:05:22
这里没有Python关键字-它不是Pythonic的。
类是否可以子类由一个名为巴塞特的标志决定,该标志可以通过can设置。
当该类型可用作另一类型的基本类型时,将设置此位。如果这一点是明确的,类型不能被子类型(类似于Java中的“最终”类)。
但是,如果您愿意的话,可以只使用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
发布于 2010-10-16 05:02:20
在我看来,类一般不应该有任何子类限制。我想建议第三种选择:在类的文档中添加一个注释,说明类不应该被子类化。
https://stackoverflow.com/questions/3948964
复制