面向对象编程(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的关系的更多相关文章

  1. Python进阶(十五)----面向对象之~继承(单继承,多继承MRO算法)

    Python进阶(十五)----面向对象之~继承 一丶面向对象的三大特性:封装,继承,多态 二丶什么是继承 # 什么是继承 # b 继承 a ,b是a的子类 派生类 , a是b的超类 基类 父类 # ...

  2. Python进阶内容(一)--- 高阶函数 High order function

    0. 问题 # 本文将围绕这段代码进行Python中高阶函数相关内容的讲解 # 文中所有代码的兼容性要求为:Python 3.6,IPython 6.1.0 def addspam(fn): def ...

  3. 论type与object的关系----Python创世纪

    这篇随笔的灵感来源于学习源码时对type及object关系的疑惑,主要参考了这篇论文: http://www.cs.utexas.edu/~cannata/cs345/Class%20Notes/15 ...

  4. Python面试题之Python中type和object的关系

    知乎上看到的提问: 两个是互为实例的关系,但不是互为子类的关系,只有type是object的子类,反之则不成立. 大牛说两者是蛋生鸡鸡生蛋的关系,但我还是不明白,有懂的麻烦解释一下, 希望不要给出外文 ...

  5. python 中type和object的关系

    转自:https://segmentfault.com/a/1190000008938763 学习python的同学都知道这么几句话 object类是所有新式类的父类. type是所有类的类. 那么t ...

  6. Python进阶内容(四)--- 迭代器(Iterator)与生成器(Generator)

    迭代器 我们已经知道,可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str等: 一类是generator,包括生成器和带yield的ge ...

  7. Python 进阶(五)定制类

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAugAAAF/CAIAAACUs6uhAAAgAElEQVR4nOzdZXubx7ov8PPV9tlrt0 ...

  8. Python进阶内容(三)--- reduce

    描述 functools.reduce() 函数会对参数序列中元素进行累积.函数将一个数据集合(列表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 function(有两个参数)先对集 ...

  9. Python进阶内容(二)--- 装饰器

    谈装饰器前,需要明白一件事,Python 中的函数和 Java.C++不太一样,Python 中的函数可以像普通变量一样当做参数传递给另外一个函数,例如: def foo(): print(" ...

随机推荐

  1. PHP中被忽略的性能优化利器:生成器

    如果是做Python或者其他语言的小伙伴,对于生成器应该不陌生.但很多PHP开发者或许都不知道生成器这个功能,可能是因为生成器是PHP 5.5.0才引入的功能,也可以是生成器作用不是很明显.但是,生成 ...

  2. 以KeyValue形式构建Lua Table

    Key为字符串 -- 定义一个key,value形式的table local kv = {fruit = "apple", bread = "french", ...

  3. 救援模式(Rescue Mode)、单用户模式(Single-User Mode)、紧急模式(Emergency Mode)的区别与联系

    前天聚餐的时候一航和启飞学长讲到RUCTF中更改root密码要进入单用户模式,我插了一句"有的系统显示的是救援模式",说完后心里一直很虚...(技术上的事还是想好再说)今天查了一下 ...

  4. redis的sorted set类型

    1.简单描述 和set类型一样,sorted set也是string类型元素的集合,不同的是每个元素都会关联一个double类型的score.sorted set的实现是skip list和hash ...

  5. 「mysql优化专题」详解引擎(InnoDB,MyISAM)的内存优化攻略?(9)

    注意:以下都是在MySQL目录下的my.ini文件中改写(技术文). 一.InnoDB内存优化 InnoDB用一块内存区域做I/O缓存池,该缓存池不仅用来缓存InnoDB的索引块,而且也用来缓存Inn ...

  6. List集合在遍历过程中的删除

    List集合在遍历过程中的删除:[1,1,2,3,4,5] for循环正续会漏掉一个1 for(int i=0;i<list.size();i++){ if(list.get(i).equals ...

  7. sqlserver 存储过程 游标实例

    if exists(select * from sysobjects where id = object_id(N'dbo.test_cursor') and type = 'P') drop PRO ...

  8. ios单独的页面支持横竖屏的状态调整,HTML5加载下(更新2)

    单独的页面支持横竖屏的状态调整,HTML5加载下 工程中设置只支持竖屏状态,在加载HTML5的界面可以是横竖屏的,在不对工程其他界面/设置做调整的同时,可以这样去 #import "View ...

  9. iOS cocos2d安装以及问题解决

    一:下载: 首先要去Cocos2d和Cocos2d-x网站下载相关的工具: 1.Cocos2d下载地址:http://www.cocos2d-iphone.org,然后进入Download页面,下边有 ...

  10. React Native绑定微信分享/登录/支付(演示+实现步骤+注意事项)

    React Native(以下简称RN)绑定微信分享/微信登录/微信支付的实现演示+源码+注意事项!微信的调用大同小异,本文实现了微信的分享功能,其他功能可以在链接文档里面找到具体的方法. 本文分文三 ...