编程有两种编程思维,一种是面向过程编程,一种是面向对象编程。
面向过程编程
面向过程编程就是根据流程执行代码,按照设定好的顺序一步一步到达想要的结果。
之前学习的所有代码流程都是面向过程编程。
面向对象编程面向对象编程就是根据代码创造出一个对象,对象里面包含数据和功能,代码部分只负责创造对象,对象后续的结果与创建对象的代码无关。
游戏创建的角色由代码决定,角色后续的操作与玩家相关。
两种编程思想没有优劣之分,后续还会出现混合使用的情况。
类与对象
面向对象编程中,对象与类是重要的组成部分。
对象对象是一个包含数据和功能的集合体
类类是一些具有类似功能的对象的集合体
类用于设置和存储对象公共的变量数据和方法。(即函数名,在面向对象中一般称为方法名)
对象从类里继承对应的变量数据和方法名。
例如人里面有很多数据,年龄,性别,性格,这些数据大不相同,但这些数据的共同特点是都属于这个人本身,所以这些数据是对象,人是类,这些数据是归属于人这个类的对象。
类与对象在代码中的体现 1.class创建类
class people:
school = 'XX大学' # 对象公共的数据
def func_name(): # 对象公共的方法名
pass
class是面向对象编程中用于创建类的关键字,类名的命名跟变量名一致 并且为了方便和变量区分推荐首字母大写。
类的代码在类定义阶段就会执行
如何提取类的数据方法
print(Student.__dict__) # 使用该方法查看名称空间 可以看成是一个字典
print(Student.__dict__['school']) # 使用字典的取值方式获取名字
print(Student.__dict__.get('choice_course')) # 使用字典的取值方式获取名字
除了这些方法以外,在面向对象中还有更简便的方法。
print(Student.school) print(Student.func_name)2.生成对象
对象名 = 类名() class School: student_A = school() student_B = school()
使用'对象名等于类名加括号'就能快捷生成对象,生成的对象拥有类里面所有的数据和方法。
print(student_A) # <__main__.School object at 0x000001D923B04A60> print(student_B) # <__main__.School object at 0x0000025E8A48F130> print(student_A.school) # XX大学
读取对象存储的数据的方法同样也是使用点,直接打印对象会显示对象所在的名称空间。
3.对象独有的数据对象除了能继承类拥有的数据外,还能拥有独有的数据。
学校是类,学生是对象,每个学生除了属于学校这个类以外,学生本身还拥有自己的各种数据,例如年龄、性别、成绩,这些都是每个学生独有的数据。
方式一:内置方法__dict__
obj1 = Student() obj1.__dict__['name'] = 'jason' # 等价于 obj1.name = 'jason' obj1.__dict__['age'] = 18 # 等价于 obj1.age = 18 obj1.__dict__['gender'] = 'male' # ... print(obj1.name) print(obj1.age) print(obj1.gender) print(obj1.school)
方式二:封装成函数init
def init(obj,name,age,gender):
obj.__dict__['name'] = name
obj.__dict__['age'] = age
obj.__dict__['gender'] = gender
stu1 = Student()
stu2 = Student()
init(stu1,'jason',18,'male')
init(stu2, 'kevin',28,'female')
print(stu1.__dict__)
print(stu2.__dict__)
方式二扩展:将封装函数功能整合到类里,作为一个方法
class Student:
"""
1.先产生一个空对象
2.自动调用类里面的__init__方法 将产生的空对象当成第一个参数传入
3.将产生的对象返回出去
"""
def __init__(self, name, age, gender):
self.name = name # obj.__dict__['name'] = name
self.age = age # obj.__dict__['age'] = age
self.gender = gender # obj.__dict__['gender'] = gender
# 左右两边的名字虽然一样 但是意思不一样 左边的其实是字典的键 右边的其实是实参
# 学生对象公共的数据
school = '清华大学'
# 学生对象公共的方法
def choice_course(self):
print('正在选课')
stu1 = Student('jason', 18, 'male')
print(stu1)
stu2 = Student('kevin', 28, 'female')
print(stu2)



