python元类__metaclass__
来源:互联网 发布:java中的线程模型包含 编辑:程序博客网 时间:2024/05/16 01:20
<pre name="code" class="python">#python元类,类的创建过程#首先调用type.__new__#然后调用类的构造函数 class.__init__def toString(c): s=""; if type(c)==tuple: s="tuple:" for i in c: s+=str(i) s+="," return s elif type(c) == dict: s="dict:" for k,v in c.items(): s+= "k=%s,v=%s" % (k,v) s+="," return s elif type(c) == list: s="list:" for i in c: s+=str(i) s+"," return s else: return c class ListMetaClass(type): def __new__(cls, name, bases, attr): #对于比较长的代码行,可以使用\来分行 #有没有感觉跟C++的define定义换行的感觉一样(-><*><-) print('cls=%s, name=%s,bases=%s,attrs=%s'\ % (toString(cls), toString(name), \ toString(bases), toString(attr))) attr['add']=lambda self,value:self.append(value) return type.__new__(cls, name, bases, attr) class MyList(list): __metaclass__ = ListMetaClass if __name__ == "__main__": myList = MyList() myList.add(100) print(myList) def listAdd(self,value): self.append(value) MyList2 = ListMetaClass("MyList2", (list,), dict(add=listAdd)) myList2=MyList2() myList2.add(1000) print(myList2)"""程序输出:cls=<class '__main__.ListMetaClass'>, name=MyList,bases=tuple:<type 'list'>,,attrs=dict:k=__module__,v=__main__,k=__metaclass__,v=<class '__main__.ListMetaClass'>,[100]cls=<class '__main__.ListMetaClass'>, name=MyList2,bases=tuple:<type 'list'>,,attrs=dict:k=add,v=<function listAdd at 0x01AACBB0>,[1000]"""
1 0
- python元类__metaclass__
- [Python]元类和__metaclass__
- Python中的元类(__metaclass__)
- python当中__metaclass__探讨
- python __metaclass__ metaclass
- python 类demo(2)__metaclass__批量化添加属性
- __metaclass__
- Python中的__metaclass__=type什么意思
- Python中的__metaclass__=type什么意思
- Python __new__, __init__, __metaclass__, __call__, __del__, __getattr__, __getattribute__
- Python 单例模式详解 __new__, import ,__dict__,__metaclass__
- Python元类
- Python元类
- Python之元类
- python学习~元类
- python 元类
- python中的元类
- 关于python元类
- NTFS硬盘第一次写操作很慢
- 想你
- 动态加载布局
- IAAS
- ceph存储 Dmidecode命令详解
- python元类__metaclass__
- winfrom 底层类 验证码
- Github上更新自己Fork的代码
- TCP/IP网络编程之四书五经
- C#操作Office文件(四)
- OpenCV中对数组(矩阵)的操作的函数表
- java应用 tomcat中实现https安全连接的方法
- Ubuntu 安装mysql和简单操作
- MySQL数据库导入外部*.sql文件详细步骤