元类会自动将你通常传给‘type’的参数作为自己的参数传入

来源:互联网 发布:多线程编程java例题 编辑:程序博客网 时间:2024/05/20 19:15

元类会自动将你通常传给‘type’的参数作为自己的参数传入

def upper_attr(future_class_name, future_class_parents, future_class_attr):'''返回一个类对象,将属性都转为大写形式'''#  选择所有不以'__'开头的属性    attrs = ((name, value) for name, value in future_class_attr.items() if not name.startswith('__'))# 将它们转为大写形式    uppercase_attr = dict((name.upper(), value) for name, value in attrs)# 通过'type'来做类对象的创建    return type(future_class_name, future_class_parents, uppercase_attr)class Foo(object):    __metaclass__ = upper_attr   # 在这里定义__metaclass__,这样就只会作用于这个类中    bar = 'bip'print hasattr(Foo, 'bar')# 输出: Falseprint hasattr(Foo, 'BAR')# 输出:Truef = Foo()print f.BAR

运行结果如下:

Python 2.7.13 (default, Jan 12 2017, 17:59:37) [GCC 6.3.1 20161221 (Red Hat 6.3.1-1)] on linux2Type "help", "copyright", "credits" or "license" for more information.>>> FalseTruebip>>> 
0 0
原创粉丝点击