[Python小菜]Bulidin Function --Type使用小记

python type

type(object) 

Return the type of an object. The return value is a type object. The isinstance() built-in function is recommended for testing the type of an object.

返回对象的类型。返回的对象是一个type类型。推荐使用isinstance()来检测一个对象的类型。


With three arguments, type() functions as a constructor as detailed below.
使用3个参数的时候,type()方法可以作为一个构造器。

type(name, bases, dict) 

Return a new type object. This is essentially a dynamic form of the class statement. The name string is the class name and becomes the __name__ attribute; the bases tuple itemizes the base classes and becomes the __bases__ attribute; and the dict dictionary is the namespace containing definitions for class body and becomes the __dict__ attribute. For example, the following two statements create identical type objects:
返回一个新的类型对象。从本质来说是一种类的动态声明。
name 参数是class的名称,也是 __name__属性的值
bases 元组列出了这个类的父类,成为了__bases__属性的值
dict 包含了类体的定义,成为 __dict__属性


下面是一个案例:
>>> class X(object):
...     a = 1
...
>>> X = type('X', (object,), dict(a=1))


#----------------------------------------------------------------------------
也就是说这个type可以在运行时生成我们定制的类

自己来试一试:

小例

使用type来判断对象类型是否相同:

1 ###############
In [8]: a = '1'

In [9]: b = type(a)

In [10]: isinstance('3',b)
Out[10]: True

In [11]: isinstance([],b)
Out[11]: False

使用type来动态创建类
2#################
In [12]: Pycon = type('Pycon',(object,),{'age':20})

In [13]: type(Pycon)
Out[13]: type

In [14]: Pycon.age
Out[14]: 20

In [15]: Pycon.__name__
Out[15]: 'Pycon'

3#################
In [20]: fun = lambda x: x+1

In [21]: ClaFun = type('ClaFun',(object,),{'add':fun })

In [22]: type(ClaFun.add)
Out[22]: instancemethod


In [26]: a = ClaFun()

In [27]: a.add(3)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-27-bebdff6e9b30> in <module>()
----> 1 a.add(3)

TypeError: <lambda>() takes exactly 1 argument (2 given)
#---但是调用不行,缺少了一个self参数

4#################
In [29]: fun = lambda self,x: x+1

In [30]: ClaFun = type('ClaFun',(object,),{'add':fun })

In [31]: a = ClaFun()

In [32]: a.add(3)
Out[32]: 4


这样就行了,根据条件动态创建类应该很有用处。

posted @ 2013-05-13 22:49  javawebsoa  Views(237)  Comments(0Edit  收藏  举报