面向对象(对象,类,父类,异常捕获)
python最后的收尾
面向对象(一切都是对象)
对象
定义:数据和功能的结合体(化妆品就是数据 化妆用具就是功能把他们放在一个化妆盒子,这个化妆盒子就是对象)
类
定义:在程序中需要先定义类,才能产生对象,与现实生活相反(现实生活中先有人再有人类)
# 定义类 class Student: # 相同的数据 school = '清华大学' # 相同的功能 def choose_course(self): print('选课')
定义类的语法结构(在类中定义的函数称为方法)
1.class是定义类的关键字
2.student是类的名字
类名在python中推荐使用首字母大写的格式
3.缩进代码块
对象相同的数据和功能
class Student: # 相同的数据 school = '清华大学' # 相同的功能 def choose_course(self): print('选课') # 产生对象:类名加括号(实例化) obj1 = Student() # 每次都会产生一个新的对象 obj2 = Student() obj3 = Student() print(id(obj1), id(obj2), id(obj3))
访问数据和功能
查看内部具有的属性和方法
class Student: school = '清华大学' def choose_course(self): print('选课') obj1 = Student() obj2 = Student() obj3 = Student() print(Student.__dict__) print(obj1.__dict__) print(obj2.__dict__) print(obj3.__dict__)
调用属性和方法
class Student: school = '清华大学' def choose_course(self): print('选课') obj1 = Student() obj2 = Student() obj3 = Student() print(obj1.school) print(obj2.school) print(obj3.school) print(obj1.choose_course()) print(obj2.choose_course()) print(obj3.choose_course())
独有的数据
1.为什么在直接调用self的时候不需要传值 2.形参self到底是谁
答:对象在调用类里面定义的方法的时候会自动将对象本身当成第一个位置参数传入,形参self指代的是一个个对象
class Student: school = '男德学院' # 让对象具有独有的数据 def __init__(self, name, age, gender): self.name = name self.age = age self.gender = gender # 绑定给对象的方法(绑定方法):对象来调用自动将对象当作参数传入 def choose_course(self): print('%s正在选课' % self.name) obj1 = Student('jason','18','male') obj2 = Student('kevin','28','female') obj3 = Student('cyka','19','female') print(obj1.name) print(obj2.name) print(obj3.name)
更改对象里面的值和增加一个新的变量名给单一对象
obj1.name='baga' print(obj1.name) obj1.xxx='kkk' print(obj1.xxx)
父类
定义:多个类相同的数据和功能的集合体
继承
定义:一个类可以继承多个父类并且拥有多个父类里面所有的东西
对象查找数据和方法的顺序
先从对象自身开始 再去产生对象的类里面找 最后去父类里面找 再找不到直接报错
异常捕获
在程序中尽量少用异常
try检测的代码要尽量的少
分类:1.语法错误
不能被允许的 出现了立马改
2.逻辑错误
可以允许发生的(bug)
语法结构:
try: 被检测的代码
except 错误类型 as 变量名: 分支代码(变量名指代的就是错误的具体信息)
#万能异常Exception/BaseException
其他关键字
else: try被检测的代码没有异常的情况下会走 finally: 无论是否有异常最终都会执行