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/  

  • 相关阅读:
    图像处理-06-图像的反色处理
    Egg.js框架
    Node基础
    Node介绍与安装
    线性表结构-数组(散列表与可变长度数组)
    复杂度分析和大O表示法
    Java框架之Struts2(六)
    Java框架之Struts2(五)
    Java框架之Struts2(四)
    Java框架之Struts2(三)
  • 原文地址:https://www.cnblogs.com/yugengde/p/8057366.html
Copyright © 2011-2022 走看看