面向对象基础概念

面向对象与类的定义:

"""
对象:存放数据与功能的一个区域
类: 用于存放多个相同对象的数据,可以极大节省空间
需要先定义类 之后才能产生对象  
"""

语法结构(定义类部分):

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))

面向对象基础概念_数据

 

 面向对象基础概念_数据_02

 访问数据和功能

 可以打印_ _dict_ _来查看类的内部具有的属性

面向对象基础概念_缩进_03

也可以用句点符来调用类中的方法,类

面向对象基础概念_定义类_04

 面向对象基础概念_数据_05

#同一个类产生的多个对象都可以访问到类里的属性,功能,或者方法
类产生的对象可以无条件访问类里的所有数据及方法

独有的数据

如果想让类产生的多个对象既有公共功能又有自己的功能数据,就要写

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)

 面向对象基础概念_缩进_06

关于self

为什么调用函数的时候形参self不需要传值,以及self的具体作用

可以先看一下这个运行结果

面向对象基础概念_缩进_07

面向对象基础概念_定义类_08

"""
对象在调用类里面定义的方法的时候 
会自动将对象本身当成第一个位置参数传入
    形参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()

面向对象基础概念_缩进_09

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)

面向对象基础概念_代码块_10

 #但是如果son里的money被另外赋值,则对象找money会找最近的一个再找类再找父类,如果都没有则会报错

异常捕获

异常分类:

1.语法错误,pycharm会立即飘红

    如代码没有缩进,缺少值,语法错误(拼写错误,格式错误等)

2.逻辑错误

     在代码运行中会出现的一些错误(bug),在编程的过程中没有办法做到立即发现

为了让程序尽量不报错可以使用如下代码

try:
    被检测的代码
    except 错误类型 as 变量名:    
            分支代码(变量名指代的就是错误的具体信息)
 # 万能异常Exception/BaseException
 #在使用的过程中,try检测的代码尽量要少,并且要尽量少用

其他关键字
else
       try # 被检测的代码没有异常的情况下会走
finally   #无论是否有异常都会执行