您可以使用元类来防止子类化:
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__ = Final
class 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方法查找的工作方式截然不同,就方法查找而言,使用上面的示例中的元类并没有优点或缺点。