PythonI/O进阶学习笔记_1.抽象、面向对象、class/object/type
前言:
是自己在学习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类的。
三 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
这里藏着很重要的知识点鸭子类型和魔法函数~ 以后会慢慢深入了解的。