测开7 - Python(异常处理、面向对象)

① 异常处理数据库

在写代码的过程当中一般会遇到一些错误致使程序报错,而且大多数时候,本身也会知道哪里最有可能出问题,这种状况下,能够对代码增长异常处理。函数

 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”替换为具体的出错类型,前提是你写代码的时候清楚哪一种报错类型,若是不符合写的类型,同样仍是会遇到程序报错运行失败;spa

第二点,except 是出错执行的部分,else 是没出错执行的部分,finally 是出不出错都会执行的部分;code

第三,info 是出错时系统给出的提示,上面的错误提示为 ’list index out of range‘,可是上面并无用到导入的模块,导入模块能够把程序报错时的全部信息获取到,具体到哪一行。以下:orm

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,若是报错那必定是请求发送有问题,这样就能够避免写的过程当中报错了而后像个没头苍蝇同样处处试~~~对象

 

② 面向对象blog

几个概念:继承

:至关于一个模型,里面集合了一些方法和属性,类的组成:类名、属性和方法索引

对象:根据模型具象化的东西接口

实例化:根据模型造对象的过程

【封装】

封装的主要特色以下所示。

  • 对象的行为对于外部世界来讲是不可见的,或者说对象的状态信息是私密的。
  • 客户端不能经过直接操做来改变对象的内部状态。相反,客户端须要经过发送消息来请求对象改变其内部状态。对象能够根据请求的类型,经过特定的成员函数(例如 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. 面向对象的三个基本要素:封装、继承和多态

 

 

就先酱紫吧~😉

相关文章
相关标签/搜索