深刻理解Python中的元类(metaclass)--代码实践
2024-09-06 18:36:09
根据http://blog.jobbole.com/21351/所作的代码实践。
这篇讲得不错,但以我现在的水平,用到的机会是很少的啦。。。
#coding=utf-8 class ObjectCreator(object): pass my_object = ObjectCreator() # print my_object def echo(o): print o echo(ObjectCreator) print hasattr(ObjectCreator, 'new_attribute') ObjectCreator.new_attribute = 'foo' print hasattr(ObjectCreator, 'new_attribute') print ObjectCreator.new_attribute ObjectCreatorMirror = ObjectCreator print ObjectCreatorMirror() def choose_class(name): if name == 'foo': class Foo(object): pass return Foo else: class Bar(object): pass return Bar print '========================' MyClass = choose_class('foo') print MyClass print MyClass() print '============================' print type(1) ") print type(ObjectCreator) print type(ObjectCreator()) print '==========================' MyShinyClass = type('MyShinyClass', (), {}) print MyShinyClass print MyShinyClass() print '=========================' Foo = type('Foo', (), {'bar':True}) print Foo print Foo.bar f = Foo() print f print f.bar print '======================' FooChild = type('FooChild', (Foo,), {}) print FooChild print FooChild.bar print '===========================' def echo_bar(self): print self.bar FooChild = type('FooChild', (Foo,),{'echo_bar': echo_bar}) print hasattr(Foo, 'echo_bar') print hasattr(FooChild, 'echo_bar') my_foo = FooChild() print my_foo.echo_bar() print '=============================' age = 35 print age.__class__ name = 'bob' print name.__class__ def foo(): pass print foo.__class__ class Bar(object): pass b = Bar() print b.__class__ print '============================' print age.__class__.__class__ print name.__class__.__class__ print foo.__class__.__class__ print b.__class__.__class__ print '============================' class UpperAttrMetaClass(type): def __new__(cls, name, bases, dct): attrs = ((name, value) for name, value in dct.items() if not name.startswith('__')) uppercase_attr = dict((name.upper(), value) for name, value in attrs) return super(UpperAttrMetaClass, cls).__new__(cls, name, bases, uppercase_attr) class Foo(object): __metaclass__ = UpperAttrMetaClass bar = 'bip' print hasattr(Foo, 'bar') print hasattr(Foo, 'BAR') f = Foo() print f.BAR print '============================'
最新文章
- [LeetCode] Compare Version Numbers 版本比较
- Hadoop基础思维导图
- P4基函数
- css/js在线压缩工具
- codeforces 676D Theseus and labyrinth BFS搜索
- Android源码中的FLAG为何使用16进制
- HIdernate入门
- python_Opencv_读取视频
- mybaitis配置信息
- javascript焦点图自动缓冲滚动
- 监控redis进程,如果没有自动重启
- 优先级队列Priority_queue
- 【转载】小结一下linux 2.6内核的四种IO调度算法
- Sqlite操作帮助类
- JSON的介绍与细节
- SQL语句操作数据
- 背水一战 Windows 10 (69) - 控件(控件基类): UIElement - Manipulate 手势处理, 路由事件的注册, 路由事件的冒泡, 命中测试的可见性
- Windows安装使用Openssl
- 比较完整的HIS系统解释(转载记录)
- Cookies读写
热门文章
- python自动化测试学习笔记-8多线程
- ASP.Net 知识点总结(五)
- [转]C语言字符串操作总结大全(超详细)
- 题解报告:poj 1321 棋盘问题(dfs)
- Hbase源码分析:RPC概况
- Myeclipse2014安装&;破解激活
- HTML城市联动
- 1682. [HAOI2014]贴海报
- Android Could not find com.afollestad:material-dialogs:0.7.6.0 解决
- Android通过微信实现第三方登录并使用OKHttp获得Token及源码下载