Python 类、元类小实验

作者: treelake | 来源:发表于2016-11-20 13:53 被阅读396次

理解python的类实例化
class type(name, bases, dict)官方定义
object.__new__(cls[, ...])官方定义
Customizing class creation 定制类创建 官方文档
Built-in Types 内建类型 官方文档

准备知识

  • 当一个类定义被执行,发生了这些事:
    • 一个合适的元类被确定
    • 类命名空间被准备好
    • 类主体被执行
    • 类对象被创建
  • 类中定义的__new__(cls[, ...])方法用来创建类cls的一个新实例,它是特殊的不用声明的静态方法。
  • 类中对__call__方法的定义意味着对该类的实例的括号运算符的重载。
  • type(x)返回x的类型。类是元类的实例(Python中一切皆对象,类也是对象,对象是类的实例,只不过类的类是特殊的元类),所以int的类是type(元类)。表示构造关系。整型1由int类构造,int类由元类构造。(类名+括号运算符调用类的构造函数,类定义的过程即是元类实例化的过程,元类中实现了构造类的规则)。
a = 1
type(a)
# int
type(int)
# type
  • x.__mro__返回类x的所有超类(父类)(包括x自身)(MRO-方法解析顺序),表示类之间的继承关系,int继承object。继承关系和构造关系是两回事。
int.__mro__
# (int, object)

实验


理解

  • MyType继承type并重载type中的方法,是我们自定义的元类。指定类MyTypeInstance的元类为MyType意味着用MyType来构建类MyTypeInstanceMyType中重载的__new____init__方法影响类MyTypeInstance的定义过程。__new__可以控制类名与类属性的审查,__init__可以增加或修改类的属性。而MyType__call__方法则控制类MyTypeInstance的实例化过程。

  • MyType元类默认是type(与继承type无关),即MyTypetype的实例,亦即MyType = type(name, bases, dict)MyType的定义过程(即type类的实例化过程)调用的是type__call__方法。
    __new__是静态方法,__call____init__是实例方法。实际上isinstance(type, type)得到True,即typetype的实例,type调用__call__方法也就说得通了,也就是type实例+()运算符 等于 type实例调用了它的类type中定义的__call__实例方法。在__call__方法中先调用__new__静态方法来产生一个python对象,然后调用type实例的__init__方法修改新对象的属性。

相关文章

  • Python 类、元类小实验

    理解python的类实例化class type(name, bases, dict)官方定义object.__ne...

  • Python 进阶丨如何创建你的第一个 Python 元类?

    摘要:通过本文,将深入讨论Python元类,其属性,如何以及何时在Python中使用元类。 Python元类设置类...

  • 10.元类

    元类的对象是类type是python的内建元类 自定义元类:

  • 29.Python之面向对象的元类

    Python之面向对象的元类 什么是元类?类的类就是元类,元类创建对象。使用class定义的类,用来产生程序员自己...

  • Python 元类

    什么是元类?元类就是创建类的类,type是最原始的一个元类。(实例是实例化的类,而类是元类的实例)python中一...

  • Python元类及单例设计模式案例解析

    Time will tell. 一、元类 元类用于创建类的类。在 python 中,万物皆对象,类当然也是对象。 ...

  • python重要知识点总结一

    内容包含: 元类 python 对象和类的绑定以及类方法,静态方法 python 子类调用父类方法总结 pytho...

  • python设计模式 - 单例模式元类

    python 环境 简介 元类是一个类的类,也就是说该类是它的元类的实例。类的定义由它的元类决定,通过元类,程序员...

  • python类和元类

    前段时间在B站上看到python类和元类的视频讲解,整理了视频中的代码,相信看完后对类有进一步的了解。 1.py ...

  • type与元类

    原文 1、什么是元类 通过上文的描述,我们知道了Python中的类也是对象。元类就是用来创建这些类(对象)的,元类...

网友评论

本文标题:Python 类、元类小实验

本文链接:https://www.haomeiwen.com/subject/eozspttx.html