上次理解过一次,时间久了,就忘了。。
再学习一次。。
http://blog.jobbole.com/21351/
=======================
但是,Python中的类还远不止如此。类同样也是一种对象。是的,没错,就是对象。只要你使用关键字class,Python解释器在执行的时候就会创建一个对象。下面的代码段:
将在内存中创建一个对象,名字就是ObjectCreator。这个对象(类)自身拥有创建对象(类实例)的能力,而这就是为什么它是一个类的原因。但是,它的本质仍然是一个对象,于是乎你可以对它做如下的操作:
1) 你可以将它赋值给一个变量
2) 你可以拷贝它
3) 你可以为它增加属性
4) 你可以将它作为函数参数进行传递
=======================
#!/usr/bin/env python # -*- coding: utf-8 -*- class ObjectCreator(object): pass print ObjectCreator def echo(o): print o echo(ObjectCreator) print hasattr(ObjectCreator, 'new_attribute') ObjectCreator.new_attribute = 'foo' print hasattr(ObjectCreator, 'new_attribute') print ObjectCreator.new_attribute ObjectCreatorMirror = ObjectCreator print ObjectCreatorMirror print ObjectCreatorMirror() 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() print type(1) print type("1") print type(ObjectCreator) print type(ObjectCreator()) MyShinyClass = type('MyShinyClass', (), {}) print MyShinyClass print MyShinyClass() Foo = type('Foo', (), {'bar': True}) print Foo print Foo.bar f = Foo() print f print f.bar def echo_bar(self): print self.bar FooChild = type('FooChild', (Foo,),{'echo_bar': echo_bar}) print FooChild print FooChild.bar print hasattr(Foo, 'echo_bar') print hasattr(FooChild, 'echo_bar') my_foo = FooChild() my_foo.echo_bar() age = 35 print age.__class__ print age.__class__.__class__ name = 'bob' print name.__class__ print name.__class__.__class__ def foo(): pass print foo.__class__ print foo.__class__.__class__ class Bar(object): pass print Bar.__class__ print Bar.__class__.__class__ b = Bar() print b.__class__ print b.__class__.__class__