内建的 type() 函数带三个参数时, 将作为强悍的动态类构造器. 如下:
type(name, bases, dict)
返回一个新的type对象. 基本上是 class 语句的动态形式. 参数:
name , 字符串, 制定要构造类的名字, 赋给新对象的 __name__ 属性;
bases,一个tuple,指定新类型的所有基类,赋给新对象的__bases__ 属性;
dict, 字典类型,作为新类的名字空间,赋给新对象的__dict__ 属性
例如,下面两条语句作用完全一样:
>>> class X(object):
... a = 1
...
>>> X = type('X', (object,), dict(a=1))
以下是创建一个新类的通常做法:
class Foo(object):
pass
而我们能够通过以下的代码达到同样的效果:
Foo = type('Foo', (), {})
目前Foo是一个名为“Foo”的类的引用,这个名为“Foo”的类以object为基类(通过type创建的类,如果没有特别指定其基类,将会默认创建新类型的类)。
这么做看起来非常棒,但如果我们需要向Foo中添加成员函数该怎么办呢?这很容易通过设置Foo的类属性办到:
def always_false(self):
return False
Foo.always_false = always_false
上面的代码也可以这么写:
Foo = type('Foo', (), {'always_false': always_false})
bases参数是Foo的基类列表,在上例中我们留空了,同时可以用type从Foo类创建一个新类:
FooBar = type('FooBar', (Foo), {})
一种应用的场景:
比如在CMDB里面会有多种manfiest设备类型,会有多种类型会有各种不一样的child方法。
这样如果 需要创建多个父类的话可以传递一个变量进去就可以生成多个类。然后就可以继承
可以节省不少的代码量.