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

一.对象

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

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

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

二.元类

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

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

--classname:新类的名称;

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

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

接下来看元类的创建,元类的创建需要继承type这个元类:

通过继承type创建了一个元类upper,再通过这个元类来创建一个类:    

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

python之禅---对象与元类的更多相关文章

  1. 【python进阶】详解元类及其应用2

    前言 在上一篇文章[python进阶]详解元类及其应用1中,我们提到了关于元类的一些前置知识,介绍了类对象,动态创建类,使用type创建类,这一节我们将继续接着上文来讲~~~ 5.使⽤type创建带有 ...

  2. python随用随学-元类

    python中的一切都是对象 按着我的逻辑走: 首先接受一个公理,「python中的一切都是对象」.不要问为什么,吉大爷(Guido van Rossum,python之父)人当初就是这么设计的,不服 ...

  3. Python复习第01天---元类底层原理

    1.通过元类限制类的名字首字母大写 if not class_name.istitle(): raise TypeError('类的名字首字母需要大写') 2. 控制类中必须要有注释 if not c ...

  4. Python学习_13_继承和元类

    继承 继承的含义就是子类继承父类的命名空间,子类中可以调用父类的属性和方法,由于命名空间的查找方式,当子类中定义和父类同名属性或者方法时,子类的实例调用的是子类中的属性,而不是父类,这就形成了pyth ...

  5. 通过 python的 __call__ 函数与元类 实现单例模式

    简单一句话,当一个类实现__call__方法时,这个类的实例就会变成可调用对象. 直接上测试代码 class ClassA: def __call__(self, *args, **kwargs): ...

  6. 【python进阶】详解元类及其应用1

    前言 元类在python中是很重要的一部分,我将分两次去讲解元类及其应用,此篇为详解元类及其应用第一篇,下面开始今天的说明~~~ 1. 类也是对象 在⼤多数编程语⾔中,类就是⼀组⽤来描述如何⽣成⼀个对 ...

  7. python中的单例模式、元类

    单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...

  8. python面试题~反射,元类,单例

    1 什么是反射?以及应用场景? test.py def f1(): print('f1') def f2(): print('f2') def f3(): print('f3') def f4(): ...

  9. Python高级语法-贯彻回顾-元类(4.99.1)

    @ 目录 1.为什么要掌握元类 2.正文 关于作者 1.为什么要掌握元类 在django中编写models的时候遇到了元类的相关操作 并且在mini-web框架编写的时候也遇到了相关的问题 意识到深入 ...

随机推荐

  1. gb2312和gbk互转

    String deStr = System.Web.HttpUtility.UrlEncode("欢迎", Encoding.GetEncoding("GBK" ...

  2. hiho 1564 - 简单dfs + 宏的危害!!!

    题目链接 H公司有 N 台服务器,编号1~N,组成了一个树形结构.其中中央服务器处于根节点,终端服务器处于叶子节点. 中央服务器会向终端服务器发送消息.一条消息会通过中间节点,到达所有的终端服务器.消 ...

  3. Msql免安装版安装

     文首提要:             我下载的MySQL版本是:mysql-5.7.17-winx64.zip  Archive版:系统:Windows7 64位. 一.解压文件 下载好MySQL后, ...

  4. 当relative遇上z-index,阻断事件捕获

    今天在调试前端页面的时候,发现addflowrank这个元素的click事件不能触发了.下图是它的元素结构. 用开发者工具试图定位这个元素,看看它到底怎么了.发现:无论我怎么用光标定位这个元素都定位不 ...

  5. iOS开发——Block使用小结

    Block语法看上去好像很特别,但它实际上是作为极普通的C语言源代码处理的.Block的实质,就是Objective-C的对象. 1.Block的语法 ^ 返回值类型 参数列表 表达式 可省略返回值类 ...

  6. NOIp2018模拟赛四十三

    有了昨天的经验,不慌,开题先看source ******** 再看看题,看到C题标题: ******** 有毒... B题的“显然”50分结论推了我一个小时,然后就弃疗了... 成绩:0+50+5=5 ...

  7. (noip模拟二十一)【BZOJ2500】幸福的道路-树形DP+单调队列

    Description 小T与小L终于决定走在一起,他们不想浪费在一起的每一分每一秒,所以他们决定每天早上一同晨练来享受在一起的时光. 他们画出了晨练路线的草图,眼尖的小T发现可以用树来描绘这个草图. ...

  8. 使用VUE开发微信小程序

    使用 mpvue 开发小程序,你将在小程序技术体系的基础上获取到这样一些能力: 彻底的组件化开发能力:提高代码复用性完整的 Vue.js 开发体验方便的 Vuex 数据管理方案:方便构建复杂应用快捷的 ...

  9. Union File System

    目录 Union File System AUFS Docker是如何使用AUFS的 image layer 和 AUFS (docker版本不同可能会有区别,我的是在/var/lib/docker下 ...

  10. mac pro配置php开发环境

    mac pro自带php和apache,所以我们只要配置下就好了 // 启动Apache服务 sudo apachectl start // 重启Apache服务 sudo apachectl res ...