前言:

是自己在学习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. [小米OJ] 3. 大数相减

    题目链接 思路: 利用两个string保存相减的数,其他模拟即可. 参考了别人的一个处理减的步骤,很简洁好看. string substract(string str1, string str2) { ...

  2. CF1195C Basketball Exercise (dp + 贪心)

    题解出处:https://www.luogu.org/problemnew/solution/CF1195C 很水的一道C题……目测难度在黄~绿左右.请各位切题者合理评分. 注意到可以选择的球员编号是 ...

  3. python函数基础-参数-返回值-注释-01

    什么是函数 函数就是有特定功能的工具 # python中有内置函数(python解释器预先封装好的)与自定义函数(用户自定义封装的)之分 为什么要用函数 # 可以减少代码冗余,增加代码复用性 # 使代 ...

  4. apache httpd多后缀解析漏洞复现

    apache httpd多后缀解析漏洞复现 一.漏洞描述 Apache Httpd支持一个文件拥有多个后缀,不同的后缀执行不同的命令,也就是说当我们上传的文件中只要后缀名含有php,该文件就可以被解析 ...

  5. web前端开发-博客目录

    web前端开发是一个新的领域,知识连接范围广,处于设计与后端数据交互的桥梁,并且现在很多web前端相关语言标准,框架库都在高速发展.在学习过程中也常常处于烦躁与迷茫,有时候一直在想如何能够使自己更加系 ...

  6. handlerMapping的初始化以及查找handler

    前提:HttpServletBean初始化了一些servlet配置,接着FrameWorkServlet创建了WebApplicationContext,最后DispatcherServlet初始化一 ...

  7. IO流的Properties集合,序列化流与反序列化流,打印流及commons-IO

    内容介绍 Properties集合 序列化流与反序列化流 打印流 commons-IO Properties类 Properties类介绍 Properties 类表示了一个持久的属性集.Proper ...

  8. Superset 官方入门教程中文翻译

    本文翻译自 Superset 的官方文档:Toturial - Creating your first dashboard 最新版本的 Superset 界面与功能上与文档中提到的会有些许出入,以实际 ...

  9. <<Modern CMake>> 翻译 2.4 项目目录结构

    <<Modern CMake>> 翻译 2.4 项目目录结构 本节内容有点跑题.但我认为这是一个很好的方法. 我将告诉你如何规划项目的目录. 这是基于惯例,但将帮助您: 轻松阅 ...

  10. POI导入excel

    前言 在做后台管理的时候经常会用到excel导入的问题,就是将excel中的内容批量导入到数据库中,正好在新项目中我也做了excel导入的功能,来分享给大家,也给自己做个记录. 核心思想 excel导 ...