Python进阶内容(五)--- type和object的关系
面向对象编程(OOP)的两大关系
继承与实现
- 继承关系:
- 子类继承自父类(base),可以使用父类的一些方法(method)和属性(attribute)
- 实现关系:
- 以类为模板,实例化一个对象,即:对象(object)是类(class)的实例(instance)

实际举例:
- snake是一种爬行动物(reptile)(子类和父类的继承关系)
- 我养的宠物蛇squasher是snake的一个实例(对象是类的实例,实现关系)
一图胜千言:

Python中一切都是对象,言外之意:
- 在Python中,函数是一个对象,类也是一个对象。那么既然类是一个对象,谁是它的类?我们都知道,一个对象肯定会有一个类模板。(类也是对象,对象是类的实例)
实例关系
上面我们说到,类也是一个对象,谁是它的类模板。
class A:
pass def foo(cls):
print(cls()) B = A
a = A() if __name__ == "__main__":
print(type(a)) # <class '__main__.A'>
print(type(1)) # <class 'int'>
print(type(foo)) # <class 'function'> print(type("abc")) # <class 'str'>
print(type(type("abc"))) # <class 'type'> print(type(A)) # <class 'type'>
print(type(type)) # <class 'type'>
print(type(object)) # <class 'type'> # 也可以使用__class__来判断是哪个类的实例
print(a.__class__) # <class '__main__.A'>
print("abc".__class__) # <class 'str'>
从上图可以看出:
- 自定义类A的实例a( a = A() )的类模板就是 自定义类A,字符串"abc"/整数1 分别是 类str/类int 的实例
- 自定义类A是类type的一个实例,那所有类的基类object,是谁的实例:type类(的实例)
- 那type类是哪个类的实例:type类。
总结:type这个类模板产生了一切实例
继承关系
继承关系是 类与类之间的关系,与对象无关,也不涉及任何实例。
class A:
pass class B(A):
pass if __name__ == "__main__":
print(A.__bases__) # (<class 'object'>,)
print(B.__bases__) # (<class '__main__.A'>,)
print(str.__bases__) # (<class 'object'>,)
print(int.__bases__) # (<class 'object'>,)
print(type.__bases__) # (<class 'object'>,)
print(object.__bases__) # ()
从上面我们可以学到:
- A继承自object,B继承自A,A-->B-->object
- str int等等内置类都是object的子类
- object类的父类为None
可是type类的父类是object,object类不是type类的实例吗?

该图表示:
- object类是type类的一个实例,type类是type类的一个实例(实现关系)
- type类是object类的子类(继承关系)
像type这种类,实例化后的对象是类,这种类叫做元类

Python进阶内容(五)--- type和object的关系的更多相关文章
- Python进阶(十五)----面向对象之~继承(单继承,多继承MRO算法)
Python进阶(十五)----面向对象之~继承 一丶面向对象的三大特性:封装,继承,多态 二丶什么是继承 # 什么是继承 # b 继承 a ,b是a的子类 派生类 , a是b的超类 基类 父类 # ...
- Python进阶内容(一)--- 高阶函数 High order function
0. 问题 # 本文将围绕这段代码进行Python中高阶函数相关内容的讲解 # 文中所有代码的兼容性要求为:Python 3.6,IPython 6.1.0 def addspam(fn): def ...
- 论type与object的关系----Python创世纪
这篇随笔的灵感来源于学习源码时对type及object关系的疑惑,主要参考了这篇论文: http://www.cs.utexas.edu/~cannata/cs345/Class%20Notes/15 ...
- Python面试题之Python中type和object的关系
知乎上看到的提问: 两个是互为实例的关系,但不是互为子类的关系,只有type是object的子类,反之则不成立. 大牛说两者是蛋生鸡鸡生蛋的关系,但我还是不明白,有懂的麻烦解释一下, 希望不要给出外文 ...
- python 中type和object的关系
转自:https://segmentfault.com/a/1190000008938763 学习python的同学都知道这么几句话 object类是所有新式类的父类. type是所有类的类. 那么t ...
- Python进阶内容(四)--- 迭代器(Iterator)与生成器(Generator)
迭代器 我们已经知道,可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str等: 一类是generator,包括生成器和带yield的ge ...
- Python 进阶(五)定制类
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAugAAAF/CAIAAACUs6uhAAAgAElEQVR4nOzdZXubx7ov8PPV9tlrt0 ...
- Python进阶内容(三)--- reduce
描述 functools.reduce() 函数会对参数序列中元素进行累积.函数将一个数据集合(列表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 function(有两个参数)先对集 ...
- Python进阶内容(二)--- 装饰器
谈装饰器前,需要明白一件事,Python 中的函数和 Java.C++不太一样,Python 中的函数可以像普通变量一样当做参数传递给另外一个函数,例如: def foo(): print(" ...
随机推荐
- Android之不须要自己定义View(ViewfindView.java)最简单的二维码扫描
不废话,先爆照 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/d ...
- python decorator 进阶
上一篇文章开始的时候提到 “一般来说,装饰器是一个函数,接受一个函数(或者类)作为参数,返回值也是也是一个函数(或者参数)” 有一般情况,就有特殊情况.第一种特殊情况:装饰器可能也是一个类:第二种特殊 ...
- HBase:Shell
HBase shell commands As told in HBase introduction, HBase provides Extensible jruby-based (JIRB) she ...
- maven项目启动报:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener 错误解决方法-杜恩德
如果你是maven项目,tomcat在发布项目的时候没有同时发布maven依赖所添加的jar包, 你需要设置一下eclipse: 项目 -> 属性 -> Deployment Assemb ...
- IOC容器在web容器中初始化过程——(二)深入理解Listener方式装载IOC容器方式
先来看一下ContextServletListener的代码 public class ContextLoaderListener extends ContextLoader implements S ...
- 常用 SQL Server 规范集锦
常用 SQL Server 规范集锦 常见的字段类型选择 1.字符类型建议采用varchar/nvarchar数据类型 2.金额货币建议采用money数据类型 3.科学计数建议采用numeric数 ...
- 【JS】第一个js示例
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- C 真正理解二级指针
本文转载自CSDN博主liaoxinmeng,做数据结构时遇到指针方面的问题,想了许久,因此我觉得很有必要复习一下二级指针及其使用 正文如下: 指针是C语言的灵魂,我想对于一级指针大家应该都很熟悉,也 ...
- JAVA多线程统计日志计数时的线程安全及效率问题
最近工作上遇到一个需求:需要根据nginx日志去统计每个域名的qps(Query Per Second,每秒查询率)数据. 解决了日志读取等问题之后,为了写一个尽可能高效的统计模块,我决定用多线程去计 ...
- Intellj Idea使用tomcat部署不成功,死活也找不到解决办法的看这里
Intellij 周六晚上开发一个简单web项目的,使用tomcat打包部署,死活也没法部署成功,和这个问题怼了6个小时,也没搞清楚具体为什么不能访问页面,但是好在最后还是找了个方法把问题解决了.以下 ...