Python——阶段性总结(一)

一. 一切皆对象

相比于静态语言,作为动态语言的Python,面向对象更加彻底。在Python中,类和函数也是对象,而且时Python中的“一等公民”——1.可以赋值给一个变量。2. 可以添加到集合对象中。3. 可以作为参数传递给函数。4. 可以当作函数的返回值。

二. type,object,和class的关系

包括Python中自带的类,以及自定义的类,class都是由按照type生成的,也就是说所有的class都是type的实例化对象;而type本身也是一个类,是自身的实例化对象。

同时无论是type,还是class,他们的父类都是object,也就是说他们都继承object。因为object是所有其它类的父类,所以称为基类,而且它也是type的实例化对象。

注:python一切皆对象的绝佳体现就是type,我们可以看到object是type的实例化对象,class们也是type的实例化对象,type自己也是自身的实例化对象——>一切皆对象

三. Python中的常见内置类型

1.对象的三个特征:身份(内存地址),类型,值。

2.None——全局只有一个

3.数值类型:int,float,complex,bool

4. 迭代类型:可遍历。

5. 序列对象:

list,range,tuple,str,array,bytes,bytearrays,memoryview(二进制序列)

6.映射(dict)类型:

key,map(map(function, iterable, ...)对每一个可迭代对象调用function

7.集合类型:

set,frozenset(这里要强调,集合和字典都是通过引用来实现的,所以执行效率高,在代码中应该优先使用二者。)

8. 上下文管理类型

9. 其它:

模块类型,class和实例,函数类型,方法类型,代码类型,object对象,type类型,ellipsis类型,notimplemented类对象

四. 方法和函数的区别

类里面的是方法,类外面的是函数,调用方法只能通过类或者该类的实例化对象。

五. 动态语言和静态语言的区别和优势

1 灵活,动态语言对类型限制非常小,很多场景下,灵活是第一位的,比如频繁修改的gui,不限制类型,对gui开发具有相当大的灵活度。静态语言对类型要求严格,导致实现同样的功能,比动态语言麻烦的多。

2 写各种验证类工具,灵活也是排第一位的,验证类工具,大量的时间花在调参或修改上,动态语言调参或修改后,马上就可以运行,而静态语言还需要编译,在这种场景下,动态语言节省了大量时间。

3 写各种一次性运行脚本,或运行时间很短的脚本,或对各种异常的容忍度较高,就算出错了,也不会引起大事件。比如定时收集性能参数的脚本。比如一个下载脚本,下载出错了,直接退出报告用户就行了。服务类的程序是不能这样的。

4 劣势就是动态语言的类型系统是很弱的,这是动态语言N多问题的根源,包括做项目费劲。

六. 魔法函数

所谓魔法函数,实际上是python中的数据类型,python中的魔法函数其实本身就存在,我们拿出来只不过是进行了重写,在使用的时候不需要我们去主动调用,会自动触发。 比如len(),它读取列表的长度并不是去遍历了列表,而是直接从底层读到该列表的长度数据,所以性能高,因而像魔法一样,故得其名。

七. 鸭子类型

会在序列中提到。

八. 抽象基类(abc模块)

1.定义

在子类中直接继承或重载该父类的方法,这样减少了代码的重用性,提高了代码的共享能力。这里的父类就是抽象基类,他不会实例化,只是作为一个“接口”存在。

2.什么是接口

接口(interface)是对象公开方法的一种集合,在Java中通常以interface关键字来定义。接口虽然实现过程和抽象基类相似,但是却具有不同的概念。

3.类与接口的不同

a. 类实现了对象的方法和属性,接口制定了使用该接口需要实现哪些方法,声明,并不实现。

b. 类可以实例化,接口不可以实例化。

c. 类中的方法都可以实现,但是接口中的方法都只是声明,不具体实现该方法,实现由子类来实现

4. 抽象基类的好处

a. 处理继承问题方面更加规范,系统。

b. 明确调用之间的相互关系。

c. 使得继承层次更加清晰。

d. 限定子类是实现的方法。

5. 抽象基类概述

必须包含一个抽象函数(纯虚函数);它是一个不完整的类;它有已经被实现的方法;也有需要子类重写的方法。

使用场景:子类们要继承父类中的属性和方法,这样使得层次清晰,代码清楚易读,其实这些是普通继承也应具有的功能,而抽象基类具有更高阶的功能,也是区别于普通继承的功能:使得每个组件(子类)都需要按照指定的规范来实现特定的方法,限定功能。

举例:实现数据中台的开发,我们提供一个对外接口让不同组件通过接口来访问数据库,不同的组件都有一个统一的需求就是读取数据。那么我们可以将读取数据这个功能声明为抽象方法,执行SQL语句也是每个子类需要实现的,可以声明为抽象的静态方法。

实现:

Python标准库中有一个模块abc可以实现抽象基类和抽象方法。

抽象基类:通过继承abc模块中的ABC类来实现抽象基类。

抽象方法:通过装饰器的方法来调用abc模块中的abstractmethod方法来注解抽象基类的方法(abstractmethod注解除了可以实现抽象方法外,还可以注解类方法@classmethod,静态方法@staticmethod,属性@property。

注:Python标准库中abc模块实现了抽象基类,collections中也实现了抽象基类,numbers中也定义了有关数字对象的抽象基类。

九. isinstance和type

判断简单的数据类型可以用type,验证类和函数等推荐使用isinstance。

十. 类变量和实例变量

查找办法:Python3中——>C3算法。

十一. 类方法,静态方法和实例方法

类中采用普通书写模式的方法都是实例方法。

@staticmethod装饰器下为静态方法。

@classmethod装饰器下为类方法。

十二. mixin继承

是一种编程模式,在python等面向对象的编程语言中,它通常是已经实现某个功能单元的类,用于被其它类继承,来实现功能组合。

mixin模式特点:mixin类功能单一;不和基类关联,可以和任意基类组合;在mixin中不要使用super这种方法。

十三. 上下文管理系统

首先我们自定义一个类:

 # 在该类中enter方法是获取资源并返回实例本身;exit方法是释放资源,退出;do_something是打开后的操作。

我们只需要用with语句调用do_something方法,其余的打开和关闭文件的操作通过Sample里的enter和exit方法即可以实现:

 # 为了进一步简化上下文管理器的实现方式,python还提供了一个contextmanager的装饰器。

通过yield将函数分割成两部分,yield之前的语句在enter方法中执行,yield之后的语句在exit方法中执行。紧跟在yield后面的值是函数值:

 在使用with语句调用该函数即可

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值