在试图理解元类之前,需要先掌握python中的类
在大多数语言中,类只是描述如何生成对象的代码片段。在Python中也是如此:
clss ObjectCreator(object):
pass
my_object = ObjectCreator()
print(my_object)
<__main__.ObjectCreator object at 0x8974f2c>
但是python中的类比这更多,python中的类也是对象,
是的,一个对象。(毕竟,python中万物皆对象)
一旦使用class关键字,python就会执行它并创建一个OBJECT,在内存中创建一个名为类名的对象,这个对象(类)本身能够创建对象(实例),这就是为什么他是一个类(毕竟他可以创建对象)。
但是它仍然是一个对象,因此:
你可以将其分配给变量
你可以复制它
你可以给它添加属性
你可以将其作为函数参数传递
动态创建类
由于类是对象,因此我们可以像任何对象一样动态创建它们。type经常被用来了解对象类型
>>>print(type('and'))
<type 'str' >
但是,type有一个完全不同的能力,它可以动态创建类。type将类的描述作为参数,并返回一个类。这就是python中的元类。元类定义了类的行为方式,就像类定义了类的实例的行为一样,类是元类的实例。
type(name of the class,
tuple of the parent class (for inheritance, can be empty),
dictionary containing attributes names and values)
type接收字典来定义类的属性
>>>Foo = type('Foo', (), {'bar':True})
即:
>>>class Foo(object):
... bar = True