面向对象
面向对象
1.什么是对象?
所有的程序都是有“ 数据 ” 和 “ 功能 ”组成。(存放数据和函数的容器)
编写程序的本质:就是定义一系列的数据, 后定义一系列的功能对数据进行操作。
* 对象是数据与功能整合到一起的产物。
2.面向对象编程
面向对象编程:其实就是制造出一个个对象,将原本分散的相关数据与功能整合到一个个对象中。方便使用,提升程序的扩展性。但编程复杂度高,适用于微信,QQ等对扩展性要求较高的地方。
简单举例学生选课系统
选课系统 函数版
def choose_course(stu_dict, course):
stu_dict['course'].append(course)
print('%s选课%s成功' % (stu_dict['name'], stu_dict['course']))
stu = {
'name': 'lili',
'age': 18,
'course': [],
'choose_course': choose_course
}
stu['choose_course'](stu, 'python')
面向对象版
def choose_course(stu_dict, course):
stu_dict['course'].append(course)
print('%s选课%s成功' % (stu_dict['name'], stu_dict['course']))
stu = {
'name':'lili',
'age':18,
'gender':'female',
'course':[],
'choose_course': choose_course
}
stu['choose_course'](stu,'python')
类与对象
1.类
即种类,是面向对象分析和设计的基石。
如果有多个对象有相似的数据与功能,则为同一种类。
好处:可以将同一类对象的相同数据存放在一起,无需重复存储。 (极大节省了空间)
2.类与对象的关系
在程序中,必须先定义 类 ,然后才能调用类 ,产生对象。
对象可以访问类中共有的数据和功能,即类的内容属于对象。
类 其实就是一种节省空间,减少代码冗余的机制。
面向对象的基本思路就是把程序中要用到的相关联的数据与功能整合到对象中后使用。
类的定义与对象的产生
对象: 特征与技能的结合体
类:一系列对象相似的特征与相似的技能的结合体
强调:站在不同的分类,划分的分类不一定一样
( 调用类的过程称为:将类实例化,拿到的返回值就是程序中的对象。)
"""
使用专业的语法义务:
1.定义函数
def 函数名
2.定义类
class 类名():
pass
"""
"""
定义类:
发生了什么事?
1.立即执行类体代码
2.产生一个类的名称空间,把类体中执行的名字放置在名称空间中(大字典)
3.将类的名称空间绑定给 __dict__ 类名.__dict__
"""
# 类名一般情况下 首字母大写
class Student():
# 定义一个属性
school = 'XXX'
# 定义一个技能(函数)
def choose_course(stu_dict, course):
stu_dict['course'].append(course)
print('%s选课%s成功' % (stu_dict['name'],stu_dict['course']))
print('>>>>>>')
# 查看类的名称空间
print(Student.__dict__)
#{'__module__': '__main__', 'school': 'XXX', 'choose_course': <function Student.choose_course at 0x0000025A6C6B0C10>, '__dict__': <attribute '__dict__' of 'Student' objects>, '__weakref__': <attribute '__weakref__' of 'Student' objects>, '__doc__': None}
# 产生对象 后 调用产生对象
stu = Student()
print(stu.__dict__) # {}
给对象定义自己的属性
class Student():
# 定义一个属性
school = 'xxx'
# 下列方法不是一定要定义,需要定义时定义,无需刻意定义
def __init__(stu_obj, name, age,gender):
stu_obj.name = name
stu_obj.age = age
stu_obj.gender = gender
# 定义一个技能(函数)
def choose_course(stu_dict, course):
stu_dict['course'].append(course)
print('%s选课%s成功' % (stu_dict['name'], stu_dict['course']))
stu = Student('lili', 18, 'female')
"""
调用类一共发生几件事?
1.得到一个空对象
2.调用了Student.__dict__(空对象,'lili','18','female')
3.得到初始化结果
"""
属性的查找顺序
属性的查找:先从自己的对象中查找,然后在去产生对象的类中取class Student():
school = 'xxx' def __init__(self, name, age,gender,course=None): if course is None: course = [] self.name = name self.age = age self.gender = gender self.course = course def choose_course(self, course): self.course.append(course) print('%s选课%s成功' % (self.name, self.course)) def func(self, name, age): pass stu = Student('ly', 18, 'male') stu.choose_course('python') """ 属性的查找: 1. 类属性: 在类中写的属性就称为类属性 2. 对象属性:在对象自己的名称空间中的属性就是对象属性 类属性的查找 1. 查 print(Student.school) 2. 增加 Student.country = 'China' 3. 改 Student.school = 'BJ' 4. 删除 del Student.school print(Student.__dict__) {} 对象属性 1. 查 print(stu.name) print(stu.age) print(stu.gender) 2. 增 stu.aaa = 'aaa' 3. 改 stu.name = 'bbb' 4. 删除 del stu.name print(stu.__dict__) 类中的方法 类可以调用,对象也可以调用 类调用方法 类来调用,函数的参数有几个就要传几个 类中的方法 类可以调用,对象也可以调用, 但是,推荐对象来调用,会把自己当成第一个参数传递给函数 """