面向对象
- 面向对象编程思想前戏
- 面向过程编程与面向对象编程
- 类与对象的概念
- 代码编写类
- 代码产生对象
- 类与对象的具体操作
- 绑定方法
面向对象编程思想前戏
编写一个人狗大战小游戏
1.使用字典一个一个的描述人和狗
dog1 = {
'name': '小黑',
'type': '田园犬',
'attack_val': 30,
'life_val': 200
}
dog2 = {
'name': '小白',
'type': '恶霸犬',
'attack_val': 180,
'life_val': 500
}
person1 = {
'name': '小龙',
'type': '猛男',
'attack_val': 10,
'life_val': 1000
}
2.定义专门用来描述人和狗的函数
def get_person(name, gender, age, t_type, attack_val, life_val):
data_dict = {
'name': name,
'gender': gender,
'age': age,
't_type': t_type,
'attack_val': attack_val,
'life_val': life_val
}
return data_dict
def get_dog(name, t_type, attack_val, life_val):
data_dict = {
'name': name,
't_type': t_type,
'attack_val': attack_val,
'life_val': life_val
}
return data_dict
p1 = get_person('jason', 'male', 18, '猛男', 800, 1000)
p2 = get_person('kevin', 'female', 28, '淑女', 5, 100)
dog1 = get_dog('小黑', '松狮犬', 300, 500)
dog2 = get_dog('小白', '泰迪犬', 50, 200)
print(p1,p2)
print(dog1,dog2)
def dog_attack(dog_obj, person_obj):
print('当前人的血量是:%s' % person_obj.get('life_val'))
person_obj['life_val'] -= dog_obj.get('attack_val')
print("""狗:%s 咬了人:%s 一口 人掉血:%s 剩余血量:%s"""%(dog_obj.get('name'),person_obj.get('name'),dog_obj.get('attack_val'),person_obj['life_val']))
def person_attack(person_obj, dog_obj):
print('当前狗的血量是:%s'%dog_obj.get('life_val'))
dog_obj['life_val'] -= person_obj.get('attack_val')
print("""人:%s 锤了狗:%s 一下 狗掉血:%s 剩余血量:%s"""%(person_obj.get('name'),dog_obj.get('name'),person_obj.get('attack_val'),dog_obj['life_val']))
dog_attack(dog2,p1)
print(p1)
person_attack(p2, dog1)
print(dog1)
要避免出现以上这种情况就要让人的数据与人的功能绑定,狗的1数据与狗的功能绑定,将人的攻击动作放在产生人的函数内,给人的数据绑定一个'person_attack' = person_attack。同理将狗的攻击动作放在产生狗的函数内,给狗的数据绑定一个'dog_attack' = dog_attact。
def get_person(name, gender, age, t_type, attack_val, life_val):
def person_attack(person_obj, dog_obj):
print('当前狗的血量是:%s' % dog_obj.get('life_val'))
dog_obj['life_val'] -= person_obj.get('attack_val')
print("""人:%s 锤了狗:%s 一下 狗掉血:%s 剩余血量:%s""" % (
person_obj.get('name'), dog_obj.get('name'), person_obj.get('attack_val'), dog_obj['life_val']))
data_dict = {
'name': name,
'gender': gender,
'age': age,
't_type': t_type,
'attack_val': attack_val,
'life_val': life_val,
'person_attack':person_attack
}
return data_dict
def get_dog(name, t_type, attack_val, life_val):
def dog_attack(dog_obj, person_obj):
print('当前人的血量是:%s' % person_obj.get('life_val'))
person_obj['life_val'] -= dog_obj.get('attack_val')
print("""狗:%s 咬了人:%s 一口 人掉血:%s 剩余血量:%s""" % (
dog_obj.get('name'), person_obj.get('name'), dog_obj.get('attack_val'), person_obj['life_val']))
data_dict = {
'name': name,
't_type': t_type,
'attack_val': attack_val,
'life_val': life_val,
'dog_attack':dog_attack
}
return data_dict
p1 = get_person('jason','male',18,'猛男',800, 1000)
p2 = get_person('kevin','female',28,'淑女',10,100)
dog1 = get_dog('小黑', '松狮犬', 300, 500)
dog2 = get_dog('小白', '泰迪犬', 50, 200)
p1['person_attack'](p1,dog1)
dog1['dog_attack'](dog1,p2)
编程思想
1.面向过程思想:将程序的执行,即分布操作,分布过程中解决问题,就是将复杂的问题拆分成多步
eg:注册,登录,结算,结算购物车
注册:第一步获取用户名,第二步比对用户名数据
2.面向对象编程
核心就是“对象”二字,对象其实就是一个“容器”,将数据与功能整合到一起,只要是符合上述描述的事物都可以称之为是对象,人狗大战最后的函数内部含有数据和功能,可以称之为面向对象编程。模块文件内部含有数据和功能,也可以称之为面向对象编程
面向对象编程:有非常清晰的人物功能
类与对象的概念
对象:数据与功能的结合体
类:即类别、种类,相当于诸多对象公有的特征(数据、功能)
类只能描述出公共的特征,不同的特征应该由对象自己搞定
类与对象的创建
eg:
class Student:
school = '清华大学'
def choose_course(self):
print('学生选课功能')
class 类名:
类体代码
数据:变量名 = 变量名
功能:函数
"""类获取数据和功能有一个简便的方式>>>>>:句点符"""
print(Student.school)
print(Student.choose_course)
obj1 = Student()
obj2 = Student()
print(obj1.school)>>>>>>>>清华大学
print(obj2.school)>>>>>>>>清华大学
Student.school = '北京大学'
print(obj1.school)>>>>>>>>>>北京大学
print(obj2.school)>>>>>>>>>>北京大学
对象的实例化
class Student:
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 choose_course(self):
print('学生选课功能')
obj1 = Student()
obj2 = Student()
print(obj1.__dict__)
print(obj2.__dict__)
obj1.__dict__['name'] = 'jason'
obj1.__dict__['age'] = 18
obj1.__dict__['gender'] = 'male'
obj2.__dict__['name'] = 'kevin'
obj2.__dict__['age'] = 2
obj2.__dict__['gender'] = 'female'
print(obj1.__dict__,obj2.__dict__)
print(obj1.name)
print(obj2.name)
def init(obj,name,age,gender):
obj.name = name
obj.age = age
obj.gender = gender
init(obj1,'jason',18,'male')
init(obj2,'kevin',28,'female')
print(obj1.name)
print(obj2.name)
obj1 = Student()
obj2 = Student()
Student.set_info(obj1,'jason',18,'male')
Student.set_info(obj2,'kevin',28,'female')
print(obj1.name)
print(obj2.name)
obj1 = Student('jason', 18, 'male')
obj2 = Student('kevin', 28, 'female')
print(obj1.__dict__)
print(obj2.__dict__)
类产生对象的具体步骤
1.先创建一个没有独有数据的空对象
2.将空对象和类括号内传入的数据一并交给__init__执行,__init__的第一个参数就是对象本身:__init__(obj,name,age,gender),obj就是对象本身
3.将创建好的对象自动返回
绑定方法
class Student:
school = '清华大学'
def __init__(self, name, age):
self.name = name
self.age = age
def func(self):
print('%s正在调用func方法'%self.name)
def index(self):
print('%s正在调用index方法'%self.name)
obj1 = Student('jason', 18)
obj2 = Student('kevin', 28)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?