Python 中,可以通过使用 type() 函数动态地创建类。type() 函数的第一个参数是类名,第二个参数是基类(即父类),第三个参数是一个字典,其中包含类的属性和方法。通过动态传递参数来创建扩展类的一种常见方式是使用 setattr() 函数来设置类的属性和方法。本文主要介绍Python中通过闭包动态创建类,通过参数动态扩展一个类(class)。

class Bar:
   def super_cool_function(self):
       print("Cool")

1、利用Python闭包动态扩展类

通过在内部创建并从函数返回它来动态创建新类。

def get_class(superclass):
class Foo(superclass):
def __init__(self, ...):
...
return Foo
DynamicFoo = get_class(Bar)
myobj = DynamicFoo()

也可以更简单定义Foo类

def get_class(superclass):
class Foo(superclass):
pass
return Foo
DynamicFoo = get_class(Bar)
myobj = DynamicFoo()
myobj.super_cool_function()
# Cool

2、通过type()动态创建类

def fn(self,name="world"):
print("Hello,%s"%name)
Hello = type('Hello',(object,),dict(hello=fn))
h = Hello()
h.hello()
print(type(Hello))
print(type(h))
Hello,world
<type 'type'>
<class '__main__.Hello'>

要动态创建一个class对象,type()函数依次传入3个参数:

1)class的名称,字符串形式;
2)继承的父类集合,注意Python支持多重继承,如果只有一个父类,注意tuple的单元素写法;
3)class的方法名称与函数绑定,这里我们把函数fn绑定到方法名hello上。

推荐文档