博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python之metaclass
阅读量:6989 次
发布时间:2019-06-27

本文共 1174 字,大约阅读时间需要 3 分钟。

1

def upper_attr(class_name, class_parents, class_attr):    """    返回一个对象,将属性都改为大写的形式    """    attrs = ((name, value) for name, value in class_attr.items() if not name.startswith('__'))    uppercase_attrs = dict((name.upper(), value) for name, value in attrs)    return type(class_name, class_parents, uppercase_attrs)# 一种方式: 使用函数赋值给metaclass__metaclass__ = upper_attrpw = upper_attr('Trick', (), {
'bar': 0})print hasattr(pw, 'bar')print hasattr(pw, 'BAR')print pw.BAR# ==============================================================# 另一种方式: 使用赋值给metaclassclass UpperAttrMetaClass(type): def __new__(mcs, class_name, class_parents, class_attr): attrs = ((name, value) for name, value in class_attr.items() if not name.startswith('__')) uppercase_attrs = dict((name.upper(), value) for name, value in attrs) return super(UpperAttrMetaClass, mcs).__new__(mcs, class_name, class_parents, uppercase_attrs)class Trick(object): __metaclass__ = UpperAttrMetaClass bar = 12 money = 'unlimited'print Trick.BARprint Trick.MONEY

 参考: http://blog.jobbole.com/21351/   http://python.jobbole.com/85126/  

转载于:https://www.cnblogs.com/yugengde/p/8057366.html

你可能感兴趣的文章
OpenMP并行编程
查看>>
网络编程
查看>>
【ZJOI2016】线段树
查看>>
ActiveMQ-自定义用户验证
查看>>
IOS 项目加入SDL库 --- FFMPEG+SDL学习 之 二
查看>>
mysql的sql文件的备份与还原
查看>>
Java API —— 泛型
查看>>
十三周进度报告
查看>>
「APIO2018」选圆圈
查看>>
单例模式的那些事
查看>>
Canvas - 时钟绘制
查看>>
linux-vsftp
查看>>
modelsim 中如何加载多个对比波形文件
查看>>
Linux内核抢占与中断返回【转】
查看>>
Linux 文件操作监控inotify功能及实现原理【转】
查看>>
linux arm的存储分布那些事之一
查看>>
Spring下redis的配置
查看>>
vs2010在进行数据架构比较时报'text lines should not be null'错误
查看>>
jeecg入门操作—表单界面
查看>>
网页音乐制作器(网页钢琴)-- MusicMaker
查看>>