day14总结:异常、面向对象(2019-05-05)

一、异常(exception)

1.异常捕获

  • 正常情况下程序出现异常,程序会直接崩溃,不能接着往后执行;
  • 异常捕获就是为了让程序出现异常的时候不崩溃,自己处理异常

2.异常捕获语法

1)语法一:try-except(可以捕获所有异常)

  • 执行过程:先执行代码块1,在执行代码块1的过程中如果出现异常,程序不崩溃直接执行代码块2;如果没有出现异常,不执行代码块2直接执行其他语句
try:
    代码块1
except:
    代码块2

其他语句

2)语法二:

  • 执行过程:先执行代码段1,如果在执行代码段1的过程中出现异常,检查出现的异常类型是否和except后面的异常类型一致,如果一致程序不崩溃,直接执行代码段2;如果不一致,程序直接崩溃
  • 如果没有异常,直接执行后面其他语句
try:
    代码段1
except 异常类型:
    代码段2

其他语句

3)语法三:

  • 捕获指定的多种异常
try:
    代码段1
except (异常类型1,异常类型2,...):
    代码段2

其他语句

4)语法四:

try:
    代码块1
except 异常类型1:
    代码块2
except 异常类型2:
    代码块3
...

其他语句

5)以上四种结构的最后都可以加上一个finally

  • 不管try里面的代码有没有异常,异常有没有被捕获,finally后面的代码都会执行
  • 一般可以在finally这个地方做一些数据的保存和备份操作
try:
    代码块1
except:
    代码块2
finally:
    代码块3

其他语句

3.抛出异常:主动让程序崩溃

1)语法:

raise 异常类型
  • 注意:异常类型可以是系统自带的,也可以是程序员自定义 (要求异常类型必须是Exception的子类)

4.常见异常类型

  • IndexError
  • ValueError
  • KeyError

二、面向对象(object)

1.编程思想

  • 面向过程编程:一遇到问题就考虑通过代码一步一步的去解决问题
  • 函数式编程:一遇到问题就考虑是否能够有这样功能的一个函数
  • 面向对象编程:一遇到问题就考虑是否有这样一个类,拥有相应的功能和属性

2.什么是类,什么是对象

  • :类是拥有相同功能和相同属性的对象的集合(抽象的)
  • 对象:对象就是类的实例(具体)

3.类的声明

  • python中所有的数据类型本质都是类,每种类型对应的数据都是对象
  • 例如:int类是所有整数的集合(每个单独的整数都是int的对象)
  • 声明类就是自定义类型

1)语法

class 类名:
    类的内容

    '''
    类的说明文档
    类的属性(字段,对象属性)
    类中的方法(对象方法、类方法、静态方法):功能、函数
    '''

2)说明

  • class:声明类的关键字
  • 类名:自己命名,是标识符不能是关键字;见名知义,首字母大写,并且采用驼峰式命名(如果名字由多个单词组成,单词之间采用单词首字母大写的方式进行区分)
  • :固定写法
  • 类的内容:类的说明文档、属性、方法(功能)
  • 补充:什么是方法:声明在类中的函数(方法就是函数)

4.创建对象

  • 对象是通过类来创建的

1)语法

  • 类():创建指定类对应的对象
class Person:
    """类的说明文档: 人类"""
    def eat(self):
        print('吃东西!')

p1 = Person()
print(p1)

p2 = Person()
print(p2)

5.类中的方法

  • 类中的方法其实就是声明在类中的函数
  • 类中的方法分为三种:对象方法、类方法、静态方法

1)对象方法

  • 直接声明在类中的函数就是对象方法,有个默认参数self,需要使用“ 对象.对象方法() ”的方式去调用
  • (对象方法从语法上来说可以使用“ 类. ”的方式去使用,但这样用self会失去它存在的意义,所以不这样用)
1.1) self
  • 对象方法中默认参数self,在通过对象调用的时候,这个参数不用传参,系统会自动将当前对象传递给它;
  • 哪个对象调用的当前方法,self就是谁
  • self本质就是当前类的对象,所以对象能做的事情self都能做
class Person:
    def eat(self, food='米饭'):
        # self = p1
        # self = p2
        print('self:', self)
        print('吃东西!')
        self.run()

    def run(self):
        # self = p1
        # self = p2
        # self = p1
        print('跑步')


p1 = Person()
p2 = Person()

print(p1, p2)

# p1.eat()
p2.eat()

p1.run()

2)init方法

  • python所有的类中都有一个特殊的对象方法__ init __
  • 当通过类去创建对象的时候,系统会自动调用__ init __方法,来对对象进行初始化操作
  • 补充:python中以“ __ ”开头并且以“ __ ”结尾的方法叫魔法方法,所有的魔法方法都不需要程序员手动调用,系统会在需要的情况下自动调用

3)构造方法

  • 函数名和类名一样的方法就是构造方法
  • python中,当我们声明类的时候,系统会自动给我们创建这个类的构造方法
  • 方法中会先在内存中开辟空间创建对象,然后用创建好的对象去调用__ init __方法对对象进行初始化
  • 初始化完成后才能将对象返回
  • 创建对象的时候需不需要参数,要几个参数,看init方法
构造方法的伪代码
def Dog(*args, **kwarges):
    对象 = 创建对象(在内存中开辟空间创建对象)
    对象.__init__(*args, **kwarges)
    return 对象

6.属性

  • 属性分为:类的字段、对象属性

1)类的字段

  • 声明:直接声明在类中的变量就是类的字段
  • 怎么使用:通过“ 类.字段 ”的方式去使用
  • 什么时候用:属性的值不会因为对象不同而不同,就使用类的字段

2)对象属性

  • 声明:对象属性需要声明在init方法中,以“ self.属性=值 ”的方式来声明
  • 怎么使用:通过“ 对象.属性 ”的方式去使用
  • 什么时候用:属性的值会因为对象不同而不同,就使用对象属性
class Person:
    """类的说明文档: 人类"""
    # 1.属性
    num = 61

    def __init__(self, name1, age1=0):
        # 这儿的name和age就是Person类的对象属性
        self.name = name1
        self.age = age1

    # 2.方法


# 使用字段
Person.num = 60
print(Person.num)

# 使用对象属性
p1 = Person('小明')
print(p1.name, p1.age)


p2 = Person('小花', 3)
print(p2.name, p2.age)

3)练习

# 练习: 声明一个Dog类,有属性: 名字、年龄、颜色、品种。
# 要求创建Dog对象的时候名字和颜色必须赋值,年龄可以赋值也可以不赋值,品种不能赋值!
# 有一个吃的方法,要求不同的Dog对象,调用这个方法的时候打印'XXX(名字)在吃XXX(吃的东西)'
class Dog:
    """狗类"""
    # 属性
    def __init__(self, name1, color1, age1=0):
        self.name = name1
        self.age = age1
        self.color = color1
        self.type = '无'

    # 方法
    def eat(self, food: str):
        print('%s在吃%s' % (self.name, food))


dog1 = Dog('花花', '白色', 3)
dog1.type = '泰迪'

dog2 = Dog('财财', '黄色', 1)
dog2.type = '中华田园犬'
print(dog1.name, dog2.name)

dog1.eat('骨头')
dog2.eat('屎~')

7.对象属性的增删改查

1)查:获取对象属性的值

  • 对象.属性:获取对象属性的值,属性不存在会报错
  • getattr(对象,属性名):获取对象属性的值,属性不存在会报错
  • getattr(对象,属性名,默认值):获取对象属性的值,属性不存在不会报错,并且返回默认值

2)增/改:添加/修改属性

  • 对象.属性 = 值 :当属性存在的时候修改属性的值,当属性不存在的时候添加属性
  • setattr(对象,属性名,值):当属性存在的时候修改属性的值,当属性不存在的时候添加属性

3)删:删除对象属性

  • del 对象.属性
  • delattr(对象,属性名)

注意:对象属性的增删改查只针对单个对象,另attr方法中的属性名为字符串格式

4) __ slots __ 魔法

  • 在类中可以通过给 __ slots __ 赋值来约束当前类的对象有哪些对象属性
  • 注意:如果设置字段 __ slots __ 的值,那么当前类的对象就不能再使用 __ dict __ 属性

8.内置类属性

  • 声明类的时候系统自动给类添加的属性

1)__ name __

  • 字段:获取类的类名

2)__ doc __

  • 字段:获取类的说明文档

3)__ class __

  • 对象属性:获取对象的类

4)__ dict __(重要)

  • 字段:获取当前类所有的字段和字段对应的值,以字典的形式返回(了解)
  • 对象属性:获取当前对象中所有的对象属性和对应的值

5)__ module __

  • 字段:获取当前类所在(声明在哪儿)的模块的名字

6)__ bases __

  • 字段:获取当前类的父类,返回的是元组格式

9.补充

  • __ str ____ repr __
class Person:  
    def __init__(self, name):
        print('init方法', name)
        self.name = name

    # 定制,单独打印对象的时候的样式。返回值是什么就打印什么(要求返回值的类型必须是字符串)
    def __str__(self):
         # 打印的谁self就是谁
         return '<'+str(self.__dict__)[1:-1]+'>'

    # 定制,打印对象的时候的样式。返回值是什么就打印什么(要求返回值的类型必须是字符串)
    def __repr__(self):
        return '<' + str(self.__dict__)[1:-1] + '>'

print(Person('abc').__str__())
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335