现在让我们直接创建一个元类而不使用type()。在下面的示例中,我们将创建一个元类MultiBases,它将检查正在创建的类是否继承了多个基类。如果是这样,它将引发错误。
# our metaclass
class MultiBases(type):
# overriding __new__ method
def __new__(cls, clsname, bases, clsdict):
# if no of base classes is greator than 1
# raise error
if len(bases)>1:
raise TypeError("Inherited multiple base classes!!!")
# else execute __new__ method of super class, ie.
# call __init__ of type class
return super().__new__(cls, clsname, bases, clsdict)
# metaclass can be specified by 'metaclass' keyword argument
# now MultiBase class is used for creating classes
# this will be propagated to all subclasses of Base
class Base(metaclass=MultiBases):
pass
# no error is raised
class A(Base):
pass
# no error is raised
class B(Base):
pass
# This will raise an error!
class C(A, B):
pass
输出:
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "<stdin>", line 8, in __new__
TypeError: Inherited multiple base classes!!!








暂无数据