重写 new ( 方法以定义最简单的元类。
最简单的元类是具有新方法的类型的子类,该方法通过运行默认版本的类型来创建类对象。
用法:
定义。描述:要定义基元类,只需定义一个类,继承类型,并重载新的 (方法。class mymeta(type):
def __new__(meta,classname,supers,classdict):
return type.__new__(meta,classname,supers,classdict)
用。 class classb(classa,metaclass=mymeta):
使用时,使用关键字元类参数 metaclass 将元类传递给用户类。
例
>>class mymeta(type):通过重载类型类new() 方法和init() 方法自定义元类的构造和初始化。def __new__(meta,classname,supers,classdict):
print('调用 mymeta__new__:','meta: %s' % meta,'classname: %s' % classname,'supers: %s' % supers,'classdict: %s' % classdict,sep='')
return type.__new__(meta,classname,supers,classdict)
>class classa:pass
>class classb(classa,metaclass=mymeta):
name='梯形图读取线'
def meth(self,arg):
传递调用 mymeta__new__:
meta:
classname: classb
supers:
classdict:
mymeta 类。
>type(classb)
类型类。
>type(classa)
用法:
class mymeta(type):描述:定义一个继承自 type 的类,并重载 new ( 和 init ( 方法,这些方法由类型对象的调用 ( 调用。def __new__(meta,classname,supers,classdict):
passreturn type.__new__(meta,classname,supers,classdict)
def __init__(class,classname,supers,classdict):
pass
1) new(创建并返回一个类对象;
2) init(初始化类对象。
例
>>class mymeta(type):def __new__(meta,classname,supers,classdict):
print('调用 mymeta__new__:','meta: %s' % meta,'classname: %s' % classname,'supers: %s' % supers,'classdict: %s' % classdict,sep='')
return type.__new__(meta,classname,supers,classdict)
def __init__(class,classname,supers,classdict):
print('调用 mymeta__init__:','class: %s' % class,'classname: %s' % classname,'supers: %s' % supers,'classdict: %s' % classdict,sep='')
print('初始化类对象:',list(class.__dict__.keys())
>class classa:pass
>class classb(classa,metaclass=mymeta):
name='梯形图读取线'
def meth(self,arg):
传递调用 mymeta__new__:
meta:
classname: classb
supers:
classdict:
调用 mymeta__init__:
class:
classname: classb
supers:
classdict:
初始化类对象:'__module__', 'name', 'meth', '__doc__']
>cb=classb()
>cb.name
梯形图读取线'