python之面向对象
Python中一切皆对象
对象
数据与功能的结合体。
类
多个对象相同数据与功能的结合体。
PS:在程序中需要先定义类,之后才能产生对象。
定义类
class Student: # 相同的数据 school = '清华大学' # 相同的功能 def choose_course(self): print('选课')
定义类的语法结构
class
定义类的关键字。
Student
类的名字:类名在python中推荐首字母大写。
缩进代码块
对象相同的数据与功能。
PS:在类中定义的函数称之为“方法”。
产生对象
就是类名加括号(实例化)
obj1 = Student() # 每次都会产生一个新的对象
obj2 = Student()
obj3 = Student()
print(id(obj1), id(obj2), id(obj3))
访问数据和功能
查看内部具有的属性和方法
print(Student.__dict__) print(obj1.__dict__) print(obj2.__dict__) print(obj3.__dict__)
调用属性和方法(句点符)
print(obj1.school) print(obj2.school) print(obj3.school)
print(obj1.choose_course()) print(obj2.choose_course()) print(obj3.choose_course())
独有的数据
定义类
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, 'male') obj3 = Student('tony', 38, 'female')
obj1.choose_course() obj2.choose_course() obj3.choose_course()
self相关
为什么调用的时候形参self不需要传值
对象在调用类里面定义的方法的时候,就会自动将对象本身当成第一个位置参数传入。
形参self到底是什么?
self指代的就是一个个对象。
print(obj1.name) obj1.name = 'jasonNB' print(obj1.name) obj1.xxx = 'ooo' print(obj1.xxx)
核心补充
父类
多个类相同的数据和功能的结合体。
继承
一个类可以继承多个父类并拥有多个父类里的东西。
对象查找数据和方法的顺序
先从对象自身开始找,再去对象的类里面找,然后再到父类里去找。
异常捕获
异常分类
语法错误
不被允许的,出现了应该立刻修改。
逻辑错误
可以允许发生的,也就是常说的BUG。
语法结构
try:
被检测的代码
except 错误类型 as 变量名:
分支代码(变量名指代的就是错误的具体信息)
# 万能异常Exception/BaseExceptions
使用规则
1.异常在程序中尽量少用。
2.try检测的代码要尽量的少。
其他关键字
else
try检测的代码没有异常的情况下会走。
finally
无论是否有异常最终都会执行。