Python元类

我们创建的对象一般时从object继承来的, 但是如果我们:

1
2
type(object) 
type

元类是什么?元类实际上就是用来创建类的东西
事实上type就是一个元类, 是用来创建所有的类的元类

元类

如果我们要创建自己定义的元类的话,也要从type中继承

原理

1
2
3
4
5
6
7
8
9
# 创建一个元类
class OneSunMetaclass(type):
pass
# 元类给我们的类使用
class Foo(object, metaclass = OneMetaclass):
pass
# 继承
class Bar(Foo):
pass
  • 对于父类Foo,Python会寻找__metaclass__, 如果找到了, Python就会用它来创建类Foo, 如果没有找到, 就会用内建的type来创建这个类
  • 对于子类Bar, python会先在子类中寻找__metaclass__, 如果找到了, Python就会用它来创建类Bar, 如果没有找到, 就再从父类中寻找__metaclass__, 直到type

    创建元类

    元类的主要目的就是为了当创建类时能够自动地改变类。创建类我们需要定义__new____new__ 是在__init__之前被调用的特殊方法,是用来创建对象并返回的方法
1
2
3
4
class OneMetaclass(type):
def __new__(cls, name, bases, attrs):
...
return type.__new__(cls, name, bases, attrs)

__new__接受四个参数
cls — 当前准备创建的类的对象
name — 类的名字, 字符串
bases — 类继承的父类, 列表
attrs — 类的属性, 列表

文章作者: Shoor
文章链接: https://shoorday.github.io/posts/d04e1a92/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Shoor's Blog