Python元类最通俗的解释
对象的最大特征就是在于其拥有属性, 可以发现, 使用class关键字定义一个空类, 这个类就算不实例化, 也会拥有一些属性, 也就是说类本身也是一个对象, 除了使用class关键字, 还可以通过type()定义类.
type(name, bases, attrs) 参数说明: name是一个字符串, 用来表示类名; bases是一个数组, 用来表示基类; attrs是一个字典, 用来表示类的属性和方法; type是一个类, 通过type(name, bases, attrs)方式对type调用时, 实际调用的是type的__new__()方法.
也是说如果继承type, 并重写__new__()方法, 那就可以在解释器定义类的时候, 再执行一些其他逻辑. 比如: 类的方法加了__前缀的话, 会自动改名, 想改变这点就需要重写__new__.
元类: 继承了type的类就是元类
"""
对象的最大特征就是在于其拥有属性, 可以发现, 使用class关键字定义一个空类, 这个类就算不实例化, 也会拥有一些属性, 也就是说类本
身也是一个对象, 除了使用class关键字, 还可以通过type()定义类.
type(name, bases, attrs) 参数说明: name是一个字符串, 用来表示类名; bases是一个数组, 用来表示基类; attrs是一个字典, 用来表
示类的属性和方法; type是一个类, 通过type(name, bases, attrs)方式对type调用时, 实际调用的是type.__new__()方法.
也是说如果继承type, 并重写__new__()方法, 那就可以在解释器定义类的时候, 再执行一些其他逻辑. 比如: 类的方法加了__前缀的话, 会
自动改名, 想改变这点就需要重写__new__.
元类: 继承了type的类就是元类
"""
class MyType(type):
"""定义一个元类"""
def __new__(mcs, name, bases, attrs):
print('=' * 50)
print('name:', name)
print('bases:', bases)
print('attrs:', attrs)
return type.__new__(mcs, name, bases, attrs)
# 使用type定义类示例
A = type('A', (), {})
# 使用元类方式(1)
B = MyType('B', (), {})
# 使用元类方式(2)
class C(metaclass=MyType):
pass
"""output
==================================================
name: B
bases: ()
attrs: {}
==================================================
name: C
bases: ()
attrs: {'__module__': '__main__', '__qualname__': 'C'}
"""