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

这样就行了,根据条件动态创建类应该很有用处。
更多相关文章
  • 线程间通讯 一.NSThread 1.简单说明 ①线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 ②线程间通信的体现 1个线程传递数据给另1个线程 在1个线程中执行完特定任务后,转到另1个线程继续执行任务 ③线程间通信常用方法 // waitUntilDone的含义: ...
  •   Buffer overflow in configure() 首先,有关configure()函数的栈溢出,官网描述如下: 我们来看一下12月12日补丁的内容 http://bk1.ntp.org/ntp-dev/?PAGE=patch&REV=548acf55dxKfhb6MuYQwz ...
  • 备注:增加了点击按钮变换头像的功能    ViewController.m  #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)v ...
  • redis list类型 一.查看list类型的命令 二.list命令详解     一.查看list类型的命令 1.在终端数据 help @list 127.0.0.1:6379>help @list BLPOP key [key ...] timeout summary: Remove an ...
  • 1)从python官网上下载windows下的安装包python-2.7.3.msi并安装 2)打开IDLE(python GUI),输入 >>>import sys >>>sys.version 如果你的python是32位,将出现如下字符: ‘2.7.3 (d ...
  • 对于 HTML5 的开发者和公司决策者们而言,现在最重要的技术是 HTML.JavaScript.CSS.移动平台和设备.以及不断改进的 HTML 平台(包括浏览器和操作系统).这意味着,下面 10 件事情将发生在 2013 年: 1.基于HTML5移动平台的崛起 在开发跨平台 app 方面,HTM ...
一周排行
  • 1. 主程序的脱壳  014F:00990B35  8B10                MOV    EDX,[EAX]  014F:00990B37  8B4508              MOV    EA ...
  • 在对应的.h文件中加入声明: [cpp] view plaincopyprint? - (BOOL) connectedToNetwork;   如果方法前面加+,就相当于类的静态方法,这里要注意一下 在.m中加入定 ...
  • 1.主题和样式的区别主要区别在 主题不能作用于单个View组建,主题应该对整个应用中的所有Activity起作用或者对指定的Activity起作用. 主题定义的格式应该是改变窗口的外观格式,例如窗口变体,窗口边框等. ...
  • 汤维维   今天福布斯发布了全球投资人榜单.值得关注的是,中国市场成为了投资人最为灼热的焦点.正如alex--所说:"对中国的投资超过了美国东海岸--旧金山周边似乎已经找不到可以投资的初创企业了. 今年榜单 ...
  • The novaclient Python API Usage First create a client instance with your credentials: >>> from nova ...
  • 一.前言1.行I/O可以用两种方式执行-未格式化的或格式化的.这两种形式都用于操作字符串.2.未格式化的I/O:简单读取或写入字符串,而格式化的I/O则执行数字和其他变量的内部和外部表示形式之间的转换.二.未格式化I ...
  • "从哪里跌倒,就从哪里爬起来."今年3月刚担任新蛋中国总裁的周昭武偏偏只认这个道理. 或许连周昭武都不知道,自己是新蛋网扎根中国市场12年以来的第几任总裁.但他绝不想成为一个匆匆过客--即使他面临 ...
  • Apache使用这样的方式来判断: public static boolean isSymlink(File file) throws IOException { if (file == null) throw ne ...
  • 收入的贫富 67%的对盈利感兴趣的开发者每应用月收入低于$500,处于贫困线之下 开发者经济2013年调查了3460名访问者,约有18%表示对应用收入不感兴趣.然而,对关心盈利开发者中大部分,67%不能获得足够收入维 ...