final类:
参考连接 这里
class FinalMeta(type):
def __new__(mcls, name, bases, dict):
for base in bases:
if isinstance(base, FinalMeta):
raise TypeError("type '{0}' is not an acceptable base type".format(base.__name__))
cls = super().__new__(mcls, name, bases, dict)
return cls
class Parent(dict, metaclass=FinalMeta):
pass
class Child(Parent):
pass
输出:
Traceback (most recent call last):
File "/home/rainman/test.py", line 18, in <module>
class Child(Parent):
File "/home/rainman/test.py", line 11, in __new__
raise TypeError("type '{0}' is not an acceptable base type".format(base.__name__))
TypeError: type 'Parent' is not an acceptable base type
final 方法:
参考连接 这里
class NonOverridable(type):
def __new__(self, name, bases, dct):
if bases and "roo" in dct:
raise SyntaxError, "Overriding roo is not allowed"
return type.__new__(self, name, bases, dct)
class foo:
__metaclass__=NonOverridable
...