博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
深刻理解Python中的元类(metaclass)--代码实践
阅读量:6976 次
发布时间:2019-06-27

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

根据http://blog.jobbole.com/21351/所作的代码实践。

这篇讲得不错,但以我现在的水平,用到的机会是很少的啦。。。

#coding=utf-8class ObjectCreator(object):    passmy_object = ObjectCreator()# print my_objectdef echo(o):    print oecho(ObjectCreator)print hasattr(ObjectCreator, 'new_attribute')ObjectCreator.new_attribute = 'foo'print hasattr(ObjectCreator, 'new_attribute')print ObjectCreator.new_attributeObjectCreatorMirror = ObjectCreatorprint ObjectCreatorMirror()def choose_class(name):    if name == 'foo':        class Foo(object):            pass        return Foo    else:        class Bar(object):            pass        return Barprint '========================'MyClass = choose_class('foo')print MyClassprint MyClass()print '============================'print type(1)print type("1")print type(ObjectCreator)print type(ObjectCreator())print '=========================='MyShinyClass = type('MyShinyClass', (), {})print MyShinyClassprint MyShinyClass()print '========================='Foo = type('Foo', (), {
'bar':True})print Fooprint Foo.barf = Foo()print fprint f.barprint '======================'FooChild = type('FooChild', (Foo,), {})print FooChildprint FooChild.barprint '==========================='def echo_bar(self): print self.barFooChild = 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 = 35print age.__class__name = 'bob'print name.__class__def foo(): passprint foo.__class__class Bar(object): passb = 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 '============================'

转载地址:http://lmesl.baihongyu.com/

你可能感兴趣的文章
转 sql 优化
查看>>
posix多线程--三种基本线程编程模型
查看>>
当开始输入文字以及完成文字输入时,变换text field的背景以及系统自带一键删除的 叉叉...
查看>>
PHP安全相关的配置(1)
查看>>
期权、RSU的区别与行权事宜
查看>>
中国六个漂亮的古镇风景名胜区网站欣赏
查看>>
Razor语法(三)
查看>>
PHP之文件: 遍历目录
查看>>
区域极值
查看>>
2012 年值得关注的十个云计算服务
查看>>
virtualbox 中,虚拟机网络使用NAT方式时,其它机器对虚拟机的访问
查看>>
SQL Server2012 T-SQL对分页的增强尝试
查看>>
ASP.NET的路由系统:路由映射
查看>>
MySql避免重复插入记录
查看>>
Salesforce.com + AutoCAD WS集成研究 part2
查看>>
[Ubuntu] Access denied for user ‘debian-sys-maint’@'localhost’ (using password: YES)
查看>>
JBoss5.0下载及安装
查看>>
linux bash shell 流程控制(if/else )
查看>>
Fragment全解析系列(一):那些年踩过的坑
查看>>
小兔的棋盘(hdu2067)
查看>>