我的Python升级打怪之路【六】:面向对象(二)

面向对象的一些相关知识点

一、isinstance(obj,cls)

  检查实例obj是否是类cls的对象

class Foo(object):
    pass

obj = Foo()

isinstance(obj,Foo)

二、issubclass(sub,super)

  检查sub类是否是super类的派生类

class Foo(object):
    pass

class F(Foo):
    pass

issubclass(F,Foo)

三、异常处理

在程序执行的过程中,不可避免的会出现一些错误,有些错误出现时,我们需要让他抛出,但是有些错误出现时我们会将他捕获,但却并不去终止程序的运行。

try:
    pass
except Exception as e:
    pass

经常见到的一些异常,掉过的坑.......

AttributeError 试图访问一个对象没有的属性
IOError 输入输出的错误,或许是无法打开文件
ImportError 无法引入模块和包,看看你的路径有没有问题
IndentationError 语法错误(的子类);代码没有正确对齐
IndexError 下标索引超出序列边界
KeyError  试图访问字典中不存在的键
NameError  使用一个还未被赋予对象的变量
SyntaxError  Python代码非法,代码不能编译(代码有问题)
TypeError  传入对象类型与要求的不符合
UnboundLocalError  试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
ValueError  传入一个调用者不期望的值,即使值的类型是正确的
 1 ArithmeticError
 2 AssertionError
 3 AttributeError
 4 BaseException
 5 BufferError
 6 BytesWarning
 7 DeprecationWarning
 8 EnvironmentError
 9 EOFError
10 Exception
11 FloatingPointError
12 FutureWarning
13 GeneratorExit
14 ImportError
15 ImportWarning
16 IndentationError
17 IndexError
18 IOError
19 KeyboardInterrupt
20 KeyError
21 LookupError
22 MemoryError
23 NameError
24 NotImplementedError
25 OSError
26 OverflowError
27 PendingDeprecationWarning
28 ReferenceError
29 RuntimeError
30 RuntimeWarning
31 StandardError
32 StopIteration
33 SyntaxError
34 SyntaxWarning
35 SystemError
36 SystemExit
37 TabError
38 TypeError
39 UnboundLocalError
40 UnicodeDecodeError
41 UnicodeEncodeError
42 UnicodeError
43 UnicodeTranslateError
44 UnicodeWarning
45 UserWarning
46 ValueError
47 Warning
48 ZeroDivisionError
更多异常

你再捕获异常的时候,可以选择性的捕获,也可以就像之上的例子一样捕获所有的异常

try:
    pass
except ValueError as e:   #只捕获ValueError异常
    print(e)

异常捕获的其他的比较全面的写法

try:
    #主代码块,需要检测是否有异常的代码块
    pass
except KeyError as e:
    #异常时,执行这个代码块
    pass
else:
    #主代码执行完后,执行这个代码块
    pass
finally:
    #无论异常与否,最终执行这个代码块
    pass

主动触发异常

try:
    raise Exception("主动抛出的异常......")
except Exception as e:
    print(e)

自定义异常

class ErrorMyself(Exception):
    
    def __init__(self,msg):
        self.message = msg

    def __str__(self):
        return self.message

try:
    raise ErrorMyself('这是一个自定义异常')
except ErrorMyself as e:
    print(e)

断言

assert 1 == 1

assert 1 == 2 #我就是要让1等于2

四、反射

  • hasattr  检查是否含有某成员
  • getattr   获取某成员
  • setattr   设置某成员
  • delattr   删除某成员
class Foo(object):
    
    def __init__(self):
        self.name = 'null'

    def func(self):
        return 'nullnull'

obj = Foo()

#检查
hasattr(obj,'name')
hasattr(obj,'func')

#获取成员
getattr(obj,'name')
getattr(obj,'func')

#设置成员
setattr(obj,'age',66)
setattr(obj,'show',lambda num:num+1)

#删除成员
delattr(obj,'name')
delattr(obj,'func')

猜你喜欢

转载自www.cnblogs.com/smiling-crying/p/9216111.html