元类
Python的类本身也是一对象
class ObjectCreator(object):
pass
该代码将在内存中创建一个对象,名字是ObjectCreator,这个对象(类)自身拥有创建对象(类实例)的能力
它本质上仍是一对象,于是可以对它做如下操作:
-
你可以将它赋值给一个变量
-
你可以拷贝它
-
你可以为它增加属性
-
你可以将它作为函数参数进行传递
动态的创建类
因为类也是对象,因此可以在运行时动态的创建。
如,可以在函数中创建类
def choose_class(name):
if name=='foo':
class Foo(object):
pass
return Foo
else:
class Bar(object):
pass
return Bar
动态创建类方法:
type(类名, 父类的元组(针对继承的情况,可以为空),包含属性的字典(名称和值))
元类
元类就是用来创建类的"东西".元类就是用来创建类的类。
MyClass = type('MyClass', (), {})
#type能实现动态的创建类,是因为type就是Python在背后用来创建所有类的元类。为什么type会采用小写而不是Type,可能是为了和str,int,等保持一致性,str是用来创建字符串对象的类,int是用来创建整数对象的类,type就是创建类对象的类。
__metaclass__
class UpperAttrMetaclass(type):
def __new__(cls, name, bases, dct):
attrs = ((name, value) for name, value in dct.items() if not name.startswith('__'))
uppercase_attr = dict((name.upper(), value) for name, value in attrs)
return type.__new__(cls, name, bases, uppercase_attr)
class Foo(object):
bar = 'bip'
__metaclass__=UpperAttrMetaclass
#元类不再是type,而是UpperAttrMetaclass,当然新的元类必须是与type有关的
元类的主要用途是创建API?(慢慢理解)

浙公网安备 33010602011771号