前言:

是自己在学习python进阶IO学习视频的时候的理解和笔记,因为很多都是本菜鸟学习时候的自己的理解,有可能理解有误。

Content:

- 抽象的概念和面向对象的概念?想要大概了解python的面向对象需要注意哪些知识点?

- 由type、object、class来了解python对象的机制和特性

- python提供了哪些常用的内置类型?(被抽象成类)

一  抽象和面向对象和类

在python基础教程书中,有一章名字是抽象,在学习的时候,我还曾经把这里面抽象的概念和后面抽象基类的概念弄混淆。

1.抽象的概念

从具体事物抽出、概括出它们共同的方面、本质属性与关系等,而将个别的、非本质的方面、属性与关系舍弃,这种思维过程,称为抽象。 --baidu

 在编程中,最简单的抽象概念就是计算机能理解的一步一步的计算步骤抽象成类或者函数来进行调用,方便人进行抽象理解也方便重用(过程抽象)。

最开始的编程历史中就和我们初学编程一样,都是过程抽象(结构化设计方法),但是经过发展慢慢发现仅仅是结构化设计已经满足不了我们了,于是有了对面向对象的需求。

2.面向对象的概念

面向对象是一种对现实世界理解和抽象的方法,是计算机编程发展到一定阶段后,产生的一种软件开发方法。 --baidu

面向对象中的对象:对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。 --baidu

https://baike.baidu.com/item/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1/2262089?fr=aladdin#2

三大特性:封装、继承、多态。

3.类的概念

具有相同特性和行为的对象的抽象就是类。对象的抽象是类,类的具体是对象。类有属性和操作。

  4.python面向对象的设计

1、2、3中算是编程中的基本概念吧,python中的面向对象设计理念和其他静态语言还是有所区别的。

a)python面向对象方法中一些比较重要的知识点(不详解)

鸭子类型、抽象基类、继承的时候的查找算法和super函数、静态方法、类方法、实例方法、python的数据封装和私有属性

b)python中一切皆对象,类和函数也是对象。

c)  类和函数在python中作为对象有哪些特质?

- 可以赋值给一个变量

- 可以添加到集合对象中

- 可以作为参数传递给函数

- 可以当作函数的返回值

二  type、object和class

在看这段之前,需要先看python基础明白继承和实例的概念,还有父类和基类。

  1.type可以用来返回一个对象的类型

     a)当a是普通int、str类型时

这个结果很好玩,可以发现1的类型是int,int的类型是type。还有type的类型竟然也是type。

可以得出 type类生成了int类,int类(也是对象)生成了 a这个实例

也就是 type--》class--》object

b)如果当a是一个自定义类的时候呢?

a是Student类型,Student是type类型

所以可以得出  type是用来生成类对象的,所有的类都是type类。包括list、dict等也是的。

逻辑:类是type(自己也是个类)的对象,其他的类型是类生成的对象

2.object是所有类的基类,包括也是type这个类的基类

object是最顶层的基类,所有的类最后推到都是继承object类的。

发现type是object类的子类的,那object呢?
 
type继承了object类,
object是由type生成的对象。两者成为了循环。
而且object是最顶层的类,再往上就没有类了。
 
总结:type、object和class的关系为:
 
思考:python为什么会设计成这样的一切皆对象呢?
对象是可以随时修改的。

三  python中常用的内置类型

对象在python中,有三个特征,身份、类型和值。

  • 身份: 每一个对象都有一个唯一的身份标识自己。任何对象的身份可以使用内建函数id()来得到。这个值可以被认为是该对象的内存地址
  • 类型: 对象的类型决定了对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么样的规则。可以内建type()查看对象的类型
  • 值:对象表示的数据项

其中类型的分类常用的有可迭代类型、不可迭代类型等、和其他序列类型、映射(mapping)、数值(int、float等)、集合、上下文管理等一系列类型。

查看type实现了哪些Type?可以用isinstance来判断这个对象是否属于这个基本类型。

>>> import types

>>> dir(types)

['AsyncGeneratorType', 'BuiltinFunctionType', 'BuiltinMethodType', 'CodeType', 'CoroutineType', 'DynamicClassAttribute', 'FrameType', 'FunctionType', 'GeneratorType', 'GetSetDescriptorType', 'LambdaType', 'MappingProxyType', 'MemberDescriptorType', 'MethodType', 'ModuleType', 'SimpleNamespace', 'TracebackType', '_GeneratorWrapper', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_ag', '_calculate_meta', '_collections_abc', '_functools', 'coroutine', 'new_class', 'prepare_class']

>>> isinstance([], list)

True

>>> isinstance({}, dict)

True

这里藏着很重要的知识点鸭子类型和魔法函数~ 以后会慢慢深入了解的。

PythonI/O进阶学习笔记_1.抽象、面向对象、class/object/type的更多相关文章

  1. PythonI/O进阶学习笔记_3.2面向对象编程_python的继承(多继承/super/MRO/抽象基类/mixin模式)

    前言: 本篇相关内容分为3篇多态.继承.封装,这篇为第二篇 继承. 本篇内容围绕 python基础教程这段: 在面向对象编程中,术语对象大致意味着一系列数据(属性)以及一套访问和操作这些数据的方法.使 ...

  2. PythonI/O进阶学习笔记_3.1面向对象编程_python的多态和鸭子类型

    前言: 与第一篇的面向对象内容不同的是,第一篇中的面向对象更多的是与类.对象结合起来的概念粗浅理解,就是在编程历史中诞生的一种思想方法. 这篇的面向对象编程,更多落实到在语言设计实现中,是如何体现面向 ...

  3. PythonI/O进阶学习笔记_3.2面向对象编程_python的封装

    前言: 本篇相关内容分为3篇多态.继承.封装,这篇为第三篇 封装. 本篇内容围绕 python基础教程这段: 在面向对象编程中,术语对象大致意味着一系列数据(属性)以及一套访问和操作这些数据的方法.使 ...

  4. PythonI/O进阶学习笔记_5.python的set和dict

    前言: 我一直觉得对我来说学习知识很忌讳不系统.本篇内容与上一篇 自定义序列类是有联系的. 上一篇比较通范的了解了序列类的一些协议和特性,并且有些list的内容.这篇更加具体到set和dict这两个序 ...

  5. PythonI/O进阶学习笔记_4.自定义序列类(序列基类继承关系/可切片对象/推导式)

    前言: 本文代码基于python3 Content: 1.python中的序列类分类 2. python序列中abc基类继承关系 3. 由list的extend等方法来看序列类的一些特定方法 4. l ...

  6. PythonI/O进阶学习笔记_6.对象引用,可变性和垃圾回收

    前言: 没有前言了- -......这系列是整理的以前的笔记上传的,有些我自己都忘记我当时记笔记的关联关系了. 记住以后 笔记记了就是用来复习的!!!不看不就啥用没了吗!!! content: 1.p ...

  7. PythonI/O进阶学习笔记_7.python动态属性,__new__和__init__和元类编程(上)

    content: 上: 1.property动态属性 2.__getattr__和__setattr__的区别和在属性查找中的作用 3.属性描述符 和属性查找过程 4.__new__和__init__ ...

  8. PythonI/O进阶学习笔记_8.python的可迭代对象和迭代器、迭代设计模式

     content: 1.什么是迭代协议 2. 什么是迭代器(Iterator)和可迭代对象(Iterable) 3. 使用迭代器和可迭代对象 4. 创建迭代器和可迭代对象 5. 迭代器设计模式   一 ...

  9. PythonI/O进阶学习笔记_10.python的多线程

     content: 1. python的GIL 2. 多线程编程简单示例 3. 线程间的通信 4. 线程池 5. threadpool Future 源码分析   ================== ...

随机推荐

  1. hadoop之安装hadoop

    官网 http://hadoop.apache.org/ 下载页:https://hadoop.apache.org/releases.html 上传安装包到Linux 解压并进入到目录下 [root ...

  2. Error:too many padding sections on bottom border.

    异常信息: Error:too many padding sections on bottom border. 原因: 使用andoridstudio制作.9图错误. 解决 只怪我把线画多了. 修改后 ...

  3. python购物车升级版

    各文件内容 前言 功能架构等请参考前一篇博客,此篇博客为进阶版的存代码展示. 详细文件内容 启动文件 starts.py启动文件 import os import sys BASE_DIR = os. ...

  4. MyEclipse2014破解版

    百度云:链接:http://pan.baidu.com/s/1c3jKMa 密码:yss0 等版本)后,不要打开软件. 二.解压破解文件压缩包,得到一下文件列表: 三.双击run.bat,即可运行cr ...

  5. sql server还原数据库(请选择用于还原的备份集)

    还原数据库的时候明明选择了备份集,还是提示未选择还原的备份集 后来查了下,是因为我本地有两个数据库(2008R2和2014),对应的两个数据库实例.而还原bak是sqlserver2014的备份,我默 ...

  6. 一文搞懂List 、List<Object>、List<?>的区别以及<? extends T>与<? super T>的区别

    前段时间看<Java编程思想>泛型时对 <? extends T>与<? super T>很懵逼,接着看到泛型与集合的更蒙蔽,随后又翻开<码出高效>时, ...

  7. 0728 history

    -- :: cd /etc/yum.repos.d/ -- :: wget http://download.virtualbox.org/virtualbox/rpm/rhel/virtualbox. ...

  8. spark 源码分析之八--Spark RPC剖析之TransportContext和TransportClientFactory剖析

    spark 源码分析之八--Spark RPC剖析之TransportContext和TransportClientFactory剖析 TransportContext 首先官方文档对Transpor ...

  9. python Django编写接口并用Jmeter测试

    一.环境准备 python3.6.7 Pycharm 二.创建项目 我这里是在Django项目中新建了个APP,目录结构如下图所示: 那么怎么在已有的Django项目中新建APP并进行配置呢: 2.1 ...

  10. Angular JS 中 指令详解

    Angular JS的强大功能就在于其可以自定义很多指令,现在就指令做一下详细的剖析. 一个Angular js 指令(directive)需要指定一个唯一的名字(myDirective)和一个函数, ...