zoukankan      html  css  js  c++  java
  • python之metaclass

    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_attr
    
    pw = upper_attr('Trick', (), {'bar': 0})
    print hasattr(pw, 'bar')
    print hasattr(pw, 'BAR')
    print pw.BAR
    
    # ==============================================================
    
    
    # 另一种方式: 使用赋值给metaclass
    class 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.BAR
    print Trick.MONEY

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

  • 相关阅读:
    A good habit is half done
    mysql 练习题
    管理的实践
    mysql 表关联时执行顺序
    python 实现短信轰炸
    python django码云第三方登录
    mysql事务的隔离级别
    微服务
    什么是git
    如何使用Hexo创建博客
  • 原文地址:https://www.cnblogs.com/yugengde/p/8057366.html
Copyright © 2011-2022 走看看