Python动态构造类:借助强悍的内建 type()

内建的 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方法。
这样如果 需要创建多个父类的话可以传递一个变量进去就可以生成多个类。然后就可以继承
可以节省不少的代码量.

原文地址:https://www.cnblogs.com/ccorz/p/6120783.html