面向对象基础概念
面向对象基础概念
面向对象与类的定义:
""" 对象:存放数据与功能的一个区域 类: 用于存放多个相同对象的数据,可以极大节省空间 需要先定义类 之后才能产生对象 """
语法结构(定义类部分):
class Student_info: #class是定义类的关键字 Student_info是类的名字 grade='freshman' #缩进代码块 相同的数据 def course(self): print('选课') #相同的执行功能和数据 # 在类中定义的函数部分称为 方法
产生对象:
类名加(实例化)
#产生对象语法结构:类的名加() stu1=Student_info() stu2=Student_info() stu3=Student_info() #每次都会产生一个新的对象,他们的共同数据就是 grade=freshman 执行的相同的功能'选课'
#需要注意的是虽然都调用了相同的类,但是当打印这三个id是可以发现是不同id print(id(stu3),id(stu2),id(stu1))
可以打印_ _dict_ _来查看类的内部具有的属性
也可以用句点符来调用类中的方法,类
#同一个类产生的多个对象都可以访问到类里的属性,功能,或者方法 类产生的对象可以无条件访问类里的所有数据及方法
如果想让类产生的多个对象既有公共功能又有自己的功能数据,就要写
class Student_info: # class是定义类的关键字 Student_info是类的名字 grade ='freshman' #缩进代码块 相同的数据 def __init__(self,name,age,gender): self.name=name self.age=gender self.gender=gender def course(self): print('选课')
在下面就必须要传三个实参
stu1=Student_info('max',19,'男') stu2=Student_info('ada',21,'女') stu3=Student_info('alxe',22,'男') print(stu1.name) print(stu2.name) print(stu3.name)
关于self
为什么调用函数的时候形参self不需要传值,以及self的具体作用
可以先看一下这个运行结果
""" 对象在调用类里面定义的方法的时候 会自动将对象本身当成第一个位置参数传入 形参self指代的就是一个个对象 """
class Student_info: # class是定义类的关键字 Student_info是类的名字 grade ='freshman' #缩进代码块 相同的数据 def __init__(self,name,age,gender): self.name=name self.age=gender self.gender=gender def course(self): print('%s正在选课'% self.name) stu1=Student_info('max',19,'男') stu2=Student_info('ada',21,'女') stu3=Student_info('alxe',22,'男') stu1.course() stu2.course() stu3.course()
def __init__(self,name,age,gender): self.name=name self.age=gender self.gender=gender #那么这部分代码的作用就是在给对象赋值属性,init又叫初始化
obj1.name = 'maxNB' print(stu1.name) obj1.xxx = 'ooo' print(obj1.xxx) # 也可以通过对ob1.name的方式,修改数据,对于不存在的数据也可以做创建
通常把绑定给对象的方法(绑定方法):对象来调用自动将对象当做参数传入
比如调用name 就传name 调用age就传age等
定义补充
1.父类:多个相同的类的数据和功能的结合体
2.继承:一个类可以继承多个父类的所有以及内部的所有数据功能
3.对象查找数据和方法的顺序:
自身开始找 再去产生对象的类里面找 再去父类里面找
class Father: money=1000000 def talk(self): print('继承') class Son(Father): pass ob1=Son() ob2=Son() ob3=Son() print(ob1.money)
print(ob2.money)
#但是如果son里的money被另外赋值,则对象找money会找最近的一个再找类再找父类,如果都没有则会报错
异常捕获
异常分类:
1.语法错误,pycharm会立即飘红
如代码没有缩进,缺少值,语法错误(拼写错误,格式错误等)
2.逻辑错误
在代码运行中会出现的一些错误(bug),在编程的过程中没有办法做到立即发现
为了让程序尽量不报错可以使用如下代码
try: 被检测的代码 except 错误类型 as 变量名: 分支代码(变量名指代的就是错误的具体信息) # 万能异常Exception/BaseException #在使用的过程中,try检测的代码尽量要少,并且要尽量少用
其他关键字
else
try # 被检测的代码没有异常的情况下会走
finally #无论是否有异常都会执行