python之禅---对象与元类

时间:2022-03-07 02:07:28

众所周知,python是一门面向对象的编程语言,python中一切皆对象,那么我们先探讨一下什么是对象。

一.对象

在生活中一个事物就是一个对象,比如:一只猫就是一个对象,猫的体型、猫毛的颜色等是它的特性,而猫会叫、会跑、吃东西,这是它的的行为。在python中的定义的具有属性(特性)和方法(行为)的称之为对象,但是要理解python中一切皆对象,还得知道对象对应的类型,先看下类的定义:用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。再来看python中一切皆对象,python中最常见的就是数字、字符串、函数、类,那他们是不是对象,按照对对象的定义,不好判断他们是不是对象,但是我们可以通过类型来判断:

python之禅---对象与元类

数字1的类型是int,它是int类的一个实例对象,同理字符串、函数都是他们所属类的一个实例对象,所以他们是对象,还剩下一个就是类,可以肯定的是类也是一个对象,python中的所有类都是type类型,它们都是type类型的实例对象:

python之禅---对象与元类

我们自定义一个class A,它属于type类型,object是所有类的父类,而它也是type类型,type的类型就是它本身,其中的object将在后面的内容中描述,我们接下来来看type。

二.元类

python中type是一个内置的元类,而元类是什么,元类用于实现python中的类对象,它们是类型的类型,所有的元类都必须实现相同的类级接口,所以要创建一个元类,需要继承内置的元类type。元类的作用是生成类,当我们在自定义一个类可以通过元类实现:

python之禅---对象与元类

这与我们平时创建一个类,使用class生成的类对象是一样的,其实是再使用class关键字创建一个类,python的解释器会识别class关键字,使用type(classname,bases,dict)的方式去实现一个新类,来看下其中的参数:

--classname:新类的名称;

--bases:新类要继承的类,是一个元组,一般是object;

--dict:新类的属性和方法,是一个字典。

接下来看元类的创建,元类的创建需要继承type这个元类:
python之禅---对象与元类

通过继承type创建了一个元类upper,再通过这个元类来创建一个类:    python之禅---对象与元类

A类继承了object,它的元类是upper,可以通过type()来查看:

python之禅---对象与元类