众所周知,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. 深入C#类的方法

    构造函数 example1: static void Main(string [] args) { SE engineer=new SE(); engineer.Age=; enginner.Name ...

  2. sqlserver如何给某一用户分配只能查看某一视图的权限

    exec sp_addrole 'guestview' --GRANT SELECT  ON veiw TO [guestview]; GRANT SELECT ON  CustomerInfo TO ...

  3. POJ 3067 Japan 【 树状数组 】

    题意:左边有n个城市,右边有m个城市,现在修k条路,问会形成多少个交点 先按照x从小到大排,x相同的话,则按照y从小到大排,然后对于每一个y统计前面有多少个y比它大,它们就一定会相交 另外要用long ...

  4. css3 -阻止元素成为鼠标事件目标 pointer-events

    pointer-events:auto|none 其中pointer-events:none:元素永远不会成为鼠标事件的target. <!DOCTYPE html> <html l ...

  5. POJ-3436 ACM Computer Factory 最大流 为何拆点

    题目链接:https://cn.vjudge.net/problem/POJ-3436 题意 懒得翻,找了个题意. 流水线上有N台机器装电脑,电脑有P个部件,每台机器有三个参数,产量,输入规格,输出规 ...

  6. luogu P2252 取石子游戏(威佐夫博弈)

    题意 题解 对于像我这种不知道威佐夫博弈的人来说,拿到题就开始打表了. 然而打完后并没有发现什么. 然后才知道是威佐夫博弈. 结论是当(int)((b-a)*((sqrt(5.0)+1.0)/2.0) ...

  7. C语言传参的类型匹配

    有一个这样的问题: 形参const char *p和实参char *c可以匹配 形参const char**p和实参char**c不可以匹配 注:argument和parameter:严格而言,par ...

  8. docker-ce-17.03.2 离线安装RPM包

    [root@docker05 docker]# ll total 20796 -rw-r--r-- 1 root root    75032 Mar 26 23:52 audit-libs-pytho ...

  9. 洛谷 P1169 [ZJOI2007]棋盘制作 (悬线法)

    和玉蟾宫很像,条件改成不相等就行了. 悬线法题目 洛谷 P1169  p4147  p2701  p1387 #include<cstdio> #include<algorithm& ...

  10. zookeeper 安装笔记 3.6.7

    1 下载 ZK wget  http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.7/zookeeper-3.4.7.tar.gz   2 解 ...