元类
类就是一组用来描述如何生成一个对象的代码段。但是Python中的类还远不止如此,它的类同样也是一种对象,当使用关键字class时,Python解释器在执行的时候就会创建一个对象。
class ObjectCreator(object): #创建了一个名为ObjectCreator的对象
pass #这个对象拥有创建对象(实例对象)的能力
print(ObjectCreator) #可以打印一个类
def echo(o):
print(o)
echo(ObjectCreator) #可以将类做为参数传给函数
ObjectCreator.new_attribute = 'foo' #可以为类增加属性
print(ObjectCreator.new_attribute)
ObjectCreatorMirror = ObjectCreator #可以将类赋值给一个变量
print(ObjectCreatorMirror)
#outputs:
#<class '__main__.ObjectCreator'>
#<class '__main__.ObjectCreator'>
#foo
#<class '__main__.ObjectCreator'>
可以将它赋值给一个变量;可以拷贝它;可以为它增加属性;可以将它作为函数参数进行传递
动态地创建类:类也是对象,可以在运行时动态的创建它们,就像其他任何对象一样
def choose_class(name):
if name == 'foo':
class Foo(object):
pass
return Foo # 返回的是类,不是类的实例
else:
class Bar(object):
pass
return Bar
MyClass = choose_class('foo')
print(MyClass) # 函数返回的是类,不是类的实例
print(MyClass()) # 可以通过这个类创建类实例,也就是对象
使用type创建类:type可以接受一个类的描述作为参数,然后返回一个类。
#type(类名, 由父类名称组成的元组,包含属性的字典)
class Test:
pass
print(Test()) #创建了一个Test类的实例对象;
#output:<__main__.Test object at 0x0000022E319D9860>
Test2 = type("Test2",(),{
}) #定了一个Test2类
print(Test2()) #创建了一个Test2类的实例对象
MyDogClass = type('MyDog', (), {
})
print(MyDogClass) #output:<class '__main__.MyDog'>
Foo = type('Foo', (), {
'bar':True}) #使用type创建带有属性的类Foo
print(Foo,',',Foo.bar) #outputs:<class '__main__.Foo'> , True
FooChild = type('FooChild', (Foo,),{
}) #类继承
print(FooChild,',',FooChild.bar) #添加的属性是类属性,并不是实例属性
def echo_bar<