元类
元类就是用来创建这些类(对象)的,元类就是类的爹,通过自定义元类可以控制类对象的初始化过程
比如创建一个A类
A = MetaClass()
object = MyClass()
函数type实际上是一个元类。type就是Python在背后用来创建所有类的元类。你可以通过检查__class__属性来看到这一点
- 自定义元类
元类会自动将传给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)
return type(future_class_name, future_class_parents, uppercase_attr)#返回一个类
class A(object,metaclass=upper_attr):
# __metaclass__ = upper_attr # python2写法
a = 'abc'
a = A()
a.A # abc