面向对象
dog1 = {
'name': '小黑',
'type': '田园犬',
'attack_val': 30,
'life_val': 200
}
person1 = {
'name': '小龙',
'type': '猛男',
'attack_val': 10,
'life_val': 1000
}
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
def dog_attack(dog_obj, person_obj):
"""
:param dog_obj: 接收一条狗
:param 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):
"""
:param person_obj: 接收一个人
:param 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)
'''人调用了狗的攻击动作'''
dog_attack(p1, dog1)
'''狗调用了人的攻击工作'''
person_attack(dog2,p2)
"""如何做到只有人可以调用人的攻击动作 狗调用狗的攻击动作"""
def get_person(name, gender, age, t_type, attack_val, life_val):
def person_attack(person_obj, dog_obj):
"""
:param person_obj: 接收一个人
:param 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):
"""
:param dog_obj: 接收一条狗
:param 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.面向过程编程
将程序的执行流程化 分步操作 分布的过程解决问题
例子:注册 登录 结算购物车
"""注册:第一步获取用户名 第二步比对用户名数据 ..."""
"""结算:第一步获取购物车数据 第二步计算钱数 ..."""
过程可以理解成是流水线 面向过程编程可以理解成是在创建一条流水线
2.面向对象编程
核心就是'对象'二字
对象其实就是一个"容器" 将数据与功能整合到一起
只要是符合上述描述的事物都可以称之为是对象!!!
eg:
人狗大战最后的函数内部含有数据和功能 可以称之为面向对象编程
模块文件内部含有数据和功能 也可以称之为面向对象编程
"""仔细的想想会发现 python中一切皆对象!!!"""
python针对面向对象编程提供了专门的语法 识别度更高 编写更精简
例子:人、动物、游戏角色
"""
面向过程与面向对象两者没有优劣之分 具体要结合实际情况
甚至很多时候两者是混合在一起的!!! 思想占据的比例不同而已
"""
类与对象的概念
对象:数据与功能的结合体
类:即类别、种类 相当于诸多对象共有的特征(数据、功能)
"""
在现实生活
人 人类
对象 一群人
描述相同的特征 属于一类 但也有不同点
"""
一切皆对象
类与对象的创建
先定义类 后产生对象
class Student:
shool = '北大清华'
def choose_course(self):
print('学生选课功能')
'''类体代码无需调用就会执行 产生类的名称空间'''
'''
语法结构
class 类名:
类体代码
1.class是定义类的关键字
2.类名类似于函数名 但是首字母推荐大写 用于区分
3.类体代码就是存放对象公共数据和功能的地方
数据: 变量名 = 变量值
功能: 函数
'''
查看名称空间的方法:__dict__
Student.__dict__
Student.__dict__.['school']
'''简单的方式:句点符'''
Student.school
Student.choose_course
"""如何产生对象:类名加括号"""
obj1 = Student()
obj2 = Student()
对象的实例化
class Student:
school = '北大'
def choose_course(self):
print('学生选课功能')
obj1 = Student()
obj2 = Student()
'''方案1:逐步给对象添加独有的数据'''
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)

'''方案2:将冗余的添加步骤封装成函数'''
def init(obj, name, age, gender):
obj.name = name
obj.age = age
obj.gender = gender
obj1 = Student()
obj2 = Student()
init(obj1, 'jason', 18, 'male')
init(obj2, 'kevin', 28, 'female')
print(obj1.name)
print(obj2.name)

'''方案3:简单的封装成函数没有提现出面向对象整合的精髓>>>:将函数写到类中去'''
obj1 = Student()
obj2 = Student()
Student.set_info(obj1,'jason',18,'male')
Student.set_info(obj2,'kevin',28,'female')
print(obj1.name)
print(obj2.name)

'''方案4:类中针对给对象创建独有数据的函数名 专门定义了一个固定的方法'''
obj1 = Student('jason', 18, 'male')
obj2 = Student('kevin', 28, 'female')
print(obj1.__dict__)
print(obj2.__dict__)
"""
类中的__init__方法会在类产生对象的时候自动执行
类产生对象的具体步骤
1.先创建一个没有独有数据的空对象 {}
2.将空对象和类括号内传入的数据一并交给__init__执行
__init__的第一个参数就是对象本身
__init__(obj,name,age,gender)
3.将创建好的对象自动返回
给你提供这种方式能够减少代码的编写
ps:针对括号内第一个形参self其实就是一个普通的变量名而已
只不过该变量名将来专门接收对象的 所以给它起了个固定的名字叫self
"""

绑定方法
"""
在类中定义的函数默认都是绑定给对象使用的
即对象来调 会自动将对象当做第一个参数传入
"""
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)
'''所以应该能理解为什么类中所有的函数第一个参数都是self'''
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人