[python]python动态创建类的示例

# 1.类名
class_name='Human'
# 2.基类
class_bases=(object,)
# 3.定义阶段执行类子代码,执行类子代码,就会生成类的名称空间,然后丢进类里面
class_dic={}
class_body='''
def __init__(self,name,age):
    self.name=name
    self.age=age
def info(self):
    print('name',self.name,'age',self.age)
'''
exec(class_body,{},class_dic)
print(class_dic)
# 4.调用元类
a=type(class_name,class_bases,class_dic)
print(a) # 输出<class '__main__.Human'>
简单来说就是用exec()函数来执行代码块,生成类的名称空间,并将其添加到类字典class_dic中,key就是函数名,value就是函数内存地址;

然后调用元类,将类名,类的基类,类的名称传入type,就会生成类,这里我们没有用class关键字,也造了一个类,说明class关键字的底层,python也做了上述代码1234步骤的操作.







补充 -> exec() 函数的用法:exec(source, globals=None, locals=None),source参数表示要执行的 Python 代码,例如字符串里写上代码块。globals 和 locals 参数表示全局和局部作用域,在执行source里的代码时会将这些作用域绑定到代码中,全局的传入全局空字典,局部的传入局部空字典。

# 1.类名
class_name='Human'
# 2.基类
class_bases=(object,)
# 3.定义阶段执行类子代码,执行类子代码,就会生成类的名称空间,然后丢进类里面
class_dic={}
class_body='''
name='王炸'
age=18
'''
exec(class_body,{},class_dic)
print(class_dic) # 输出{'name': '王炸', 'age': 18}

 上述代码,在source代码块中定义了两个变量name和age,它们会丢入局部名称空间,输出的时候key就是变量名,value就是变量的内存地址,因为字符串类和整型类是内置类,其__str__()重写过会直接输出字符串,而不是输出内存地址.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值