python实现封闭类(禁止继承),python封闭,python没有seal


python没有sealed或者final的关键字,不过我们可以通过__init__来实现禁止继承。

class terminal(type):    def __init__(self, cl_name, bases, namespace):        for cls in bases:            if isinstance(cls, terminal):                raise TypeError("in "+cl_name+" definition : "+str(cls)+                                " can't be used as a base class")        super(terminal, self).__init__(cl_name, bases, namespace)# first we create a normal classclass a(object):    pass#the terminal class: it can inherit from other classes but can't be#used as base classclass b(a):    __metaclass__= terminal#this will fail at compile time, because inheriting from b is forbiddenclass c(b):    pass

这里使用metaclass来实现封闭类的,在__init__方法中会挨个检查基类看是否是不可继承的,如果不可继承就会抛出TypeError异常。

评论关闭