① 异常处理
在写代码的过程中通常会遇到一些错误导致程序报错,并且大多数时候,自己也会知道哪里最有可能出问题,这种情况下,可以对代码增加异常处理。
1 import traceback 2 a = [1,2,3] 3 try: 4 print(a[5]) 5 except Exception as info: 6 print(info) 7 else: 8 print('没出错') 9 finally: 10 print('出不出错都执行的')
上面需要说明的第一点:异常处理时也可以把上面“Exception”替换为具体的出错类型,前提是你写代码的时候清楚哪种报错类型,如果不符合写的类型,一样还是会遇到程序报错运行失败;
第二点,except 是出错执行的部分,else 是没出错执行的部分,finally 是出不出错都会执行的部分;
第三,info 是出错时系统给出的提示,上面的错误提示为 ’list index out of range‘,但是上面并没有用到导入的模块,导入模块可以把程序报错时的所有信息获取到,具体到哪一行。如下:
1 import traceback 2 a = [1,2,3] 3 try: 4 print(a[5]) 5 except Exception as a: #如果a用不到,也可以不写 as a 6 print(traceback.format_exc())
实际应用时,拿链接数据库举例,比如在连数据库时加个 try,如果报错那一定是数据库连接问题;在发送请求的地方加个 try,如果报错那一定是请求发送有问题,这样就可以避免写的过程中报错了然后像个没头苍蝇一样到处试~~~
② 面向对象
几个概念:
类:相当于一个模型,里面集合了一些方法和属性,类的组成:类名、属性和方法
对象:根据模型具象化的东西
实例化:根据模型造对象的过程
【封装】
封装的主要特点如下所示。
- 对象的行为对于外部世界来说是不可见的,或者说对象的状态信息是私密的。
- 客户端不能通过直接操作来改变对象的内部状态。相反,客户端需要通过发送消息来请求对象改变其内部状态。对象可以根据请求的类型,通过特定的成员函数(例如 get 和 set )改变他们的内部状态,以作出相应的响应。
- 在 Python 中,封装(数据和方法的隐藏)的概念不是隐式的,因为它没有提供封装所需的关键字,诸如 public、private 和 protected(在诸如 C++或 Java 之类的语言中,都提供了这些关键字)。当然,如果在变量或函数名前面加上前缀__,就可以将其访问性变为私有。
【多态】
多态的主要特征如下所示。
- 多态有两种类型
- 对象根据输入参数提供方法的不同实现。
- 不同类型的对象可以使用相同的接口。(下面的示例展示)
- 对于 Python 来说,多态是该语言的内置功能。例如,操作符“+”可以应用于两个整数以进行加法运算,也可以应用于字符串来链接他们。在下面的示例中,字符串、元组或列表都可以通过整数索引进行访问。
它为我们展示了 Python 内置类型的多态:
1 a = 'John'
2 b = (1,2,3)
3 c = [3,4,5,6] 4 print(a[1],b[0],c[2])
【继承】
以下几点有助于更好地理解继承过程。
- 继承表示一个类可以继承父类的(大部分)功能。
- 继承被描述为一个重用基类中定义的功能并允许对原始软件的实现进行独立扩展的选项。
- 继承可以利用不同类的对象之间的关系建立层次结构。与 Java 不同,Python 支持多重继承(继承多个基类)。
以下简单的定义一个类和一些说明。
1 class Car(object): 2 def __init__(self): 3 print('--init--') 4 def __del__(self): 5 print('--del--') 6 def move(self): 7 print('--move--') 8 def stop(self): 9 print('--stop--') 10 def __new__(self): 11 print('--new--') 12 return object.__new__(cls) #cls 就是class
1. 关于继承,公有属性和方法可以继承,私有方法和属性不能被继承,但是可以通过公有方法来修改。继承之后,可以通过打印'类名.mro()'或‘类名.__mro__’来查看继承的顺序。
2. __init__ 方法是一个初始化的方法,对象创建成功后自动执行。
3. __new__ 方法是创建对象的方法,实例化的过程就相当于是在执行基类的这个功能,以上的代码中,如果不加 return object.__new__(cls), 那么对象不会被创建,init 也不会执行,只会执行 new 中的方法,这是因为,第一,验证了创建对象就是去执行new这个方法;第二,子类重写了父类的方法,导致只执行子类的new方法,而子类重写的方法中不包含创建对象,所以不会被创建。因此,加上 return 那一句,就可以正常实例话,并且 init 也可以被执行。
4. 调用被重写的方法:类名.方法(self)
5. 静态方法:@staticmethod,因为在程序开发过程中,通常只会用类或者只用函数,所以有的函数定义了但与类没什么实际的关联,这种就可以放在类里面定义为一个静态方法。
6. 类方法:@classmethod,可以通过类型.类方法直接调用。
7. __del__ 方法在对象被释放/被删除时调用。
8. sys.getrefcount(对象) 可以查看对象的引用个数,比实际多1
9. 面向对象的三个基本要素:封装、继承和多态
就先酱紫吧~????