您可以使用元类来防止子类化:
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 Foo: __metaclass__ = Finalclass Bar(Foo): pass给出:
>>> class Bar(Foo):... pass... Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 5, in __new__TypeError: type 'Foo' is not an acceptable base type
这
__metaclass__ = Final条线使
Foo班级“密封”。
请注意,您将在.NET中使用密封类作为性能指标;因为不会有任何子类化方法可以直接解决。Python方法查找的工作方式截然不同,就方法查找而言,使用上面的示例中的元类并没有优点或缺点。



