内容概要
详细讲解
面向对象:一切皆对象
对象:
数据与功能的结合体
类:
多个对象相同数据与功能的组合
好比几个英雄的共同点被单独拿出来放在一起
# 在程序中需要先定义类 才能产生对象
class Student: # 定义类的时候后面类的名字一般首字母大写
# 然后放入相同的数据
school = '雄英学院'
# 然后再放入相同的功能
def choose(self): # 这边self是必要的
# 功能一般就是个函数,放在类里面叫方法
print('选课')
'''
类的语法结构
关键字:class
后面放类的名字首字母约定俗成大写
缩进的代码块
是对象相同的数据和一些功能
强调:在类中定义的函数我们称之为>>>方法
'''
# 类要产生对象就把类看作一个变量值去赋给对象,但也只能是看作马上就知道为什么了
stu_1 = Student()
stu_2 = Student()
stu_3 = Student() # 注意类每次产生的对象是新的可以通过下面方式判断
print(id(stu_1), id(stu_2), id(stu_3))
访问数据和功能
# 查看内部具有的属性和方法
print(Student.__dict__)
print(stu_1.__dict__) # 对象里是空的
# 调用属性和方法(句点符.)是不是很熟悉
print(stu_2.school)
print(stu_3.choose)
对象的独有数据
class Student:
school = '雄英学院'
# 现在这边可以添加对象所独有的数据
def __init__(self, name, age, gender):
# self还是一样必不可少,后面可以理解为形参
self.name = name # 这些都是固定格式
self.age = age
self.gender = gender # 绑定给对象的方法(绑定方法):对象来调用自动将对象当作参数传入
def choose(self): # 这边self和上面一样
print('选课')
stu_1 = Student('leo', 22, 'male')
stu_2 = Student('ace', 19, 'female')
stu_3 = Student('nick', 18, 'male')
'''
Q: 那为什么调用的时候那个self不需要传值了呢?
这个神秘的self究竟是谁?
A: 对象在调用类里面定义好的方法的时候 会自动将对象本身当成第一个位置参数传入
没第一个位置参数self是谁也就不言而喻
形参self指代的就是那些一个个的对象
'''
接下来可以看到对于对象的赋值和字典很类似
print(stu_1.name) # 先看看原来写的是什么样
stu_1.name = 'leoNB'
print(stu_1.name) # 这里再看一下打出来的东西是被修改了
# 说明这边和字典一样可以通过里面有的变量名更改变量值
# 那如果没有这个变量名呢?请看
stu_1.hobby = 'bodybuilding'
print(stu_1.hobby) # 结果也是像字典那样直接创建了这对数据
核心补充
1.父类:多个类相同的数据和功能的结合体
2.继承:一个类可以继承多个父类并拥有多个父类里面所有的东西
3.对象查找数据和方法的顺序
先从对象自身开始找 再去产生对象的类里面找 再去父类里面找 这个和名称空间很想反正就是遵循就近原则 从小范围找到大范围
# 接下来做个简单的举例
class Person(object): # 定义一个父类
def talk(self): # 父类中的方法
print("person is talking....")
class Chinese(Person): # 定义一个子类, 继承Person类
def walk(self): # 在子类中定义其自身的方法
print('is walking...')
c = Chinese() # 创建对象
c.talk() # 调用继承的Person类的方法
c.walk() # 调用本身的方法
异常捕获
异常分类
1.语法错误
不被允许 出现了应该马上修正
2.逻辑错误
可以允许发生的(bug)
所以这里就会用到一个常用的东西来规避报错
try:
被检测的代码
except 错误类型 as 变量名: # 错误类型一般就填Exception
分支代码(变量名指代的就是错误的具体信息)
# Exception和BaseException是万能异常检测
注意:
1.这个功能尽量少用
对于实际功能会有些许不利
2.try中被检测代码的部分尽可能要少
这样能把错误范围缩小
其他关键字:
else
try被检测的代码没有异常的情况下会走
finally
无论是否有异常最终都会执行
# 在网络爬虫中这个东西会大显身手,毕竟有些网络波动不可避免