今日内容概要
- 面向对象之人狗大战
- 面向对象编程思想
- 面向对象之类与对象
- 类与对象的创建
- 对象独有的数据
- 对象独有的功能
今日内容详细
面向对象之人狗大战
编写代码简单的实现人打狗 狗咬人的小游戏
'''推导步骤1 代码定义人和狗'''
person1 = {'name': 'jason',
'age': 18,
'gender': 'male',
'p_type': '猛男',
'atk_val': 999,
'life_val': 100000}
dog1 = {'name': '小黑',
'd_type': '泰迪',
'atk_val': 100,
'life_val': 8000}
'''推导步骤2 将产生人和狗的字典封装成函数 并封装人和狗的攻击函数'''
def create_person(name, age, gender, p_type, atk_val, life_val):
person = {'name': name,
'age': age,
'gender': gender,
'p_type': p_type,
'atk_val': atk_val,
'life_val': life_val}
return person
def create_dog(name, d_type, attack_val, life_val):
dog = {'name': name,
'd_type': d_type,
'atk_val': atk_val,
'life_val': life_val}
return dog
def preson_atk(preson, dog):
print(f'人{preson.get("name")}准备揍狗{dog.get("name")}')
dog['life_val'] -= person.get('atk_val')
print(f'人揍了狗一拳,狗{dog.get("name")}掉血{person.get('atk_val')}, 剩余血量{dog.get('life_val')})
def dog_atk(dog, preson):
print(f'狗{dog.get("name")}准备咬人{preson.get("name")}'
person['life_val'] -= dog.get('atk_val')
print(f'狗咬了人一口,人{preson.get("name")}掉血{dog.get('atk_val')}, 剩余血量{person.get('life_val')})
p1 = create_person('jason', 18, 'male', '猛男', 8000, 99999999)
d1 = create_dog('小黑', '恶霸', 800, 900000)
person_atk(p1, d1)
dog_atk(d1, p1)
'''推导步骤3 人和狗的攻击混乱'''
person_atk(d1, p1)
dog_atk(p1, d1)
'''推导步骤4 如何实现只有人能调用人的攻击动作 狗只能调用狗的攻击动作
>>>:数据与功能的绑定'''
def get_person(name, age, gender, p_type, atk_val, life_val):
def person_atk(person, dog):
print(f"人:{person.get('name')}准备揍狗{dog.get('name')}")
dog['life_val'] -= person.get('atk_val')
print(f"人揍了狗一拳 狗掉血:{person.get('atk_val')}狗剩余血 量:{dog.get('life_val')}")
person = {
'name': name,
'age': age,
'gender': gender,
'p_type': p_type,
'atk_val': atk_val,
'life_val': life_val,
'person_atk': person_atk
}
return person
def get_dog(name, d_type, atk_val, life_val):
def dog_atk(dog, person):
print(f"狗:{dog.get('name')}准备咬人:{person.get('name')}")
person['life_val'] -= dog.get('atk_val')
print(f"狗咬了人一口 人掉血:{dog.get('atk_val')} 人剩余 血量:{person.get('life_val')}")
dog = {
'name': name,
'd_type': d_type,
'atk_val': atk_val,
'life_val': life_val,
'dog_atk': dog_atk
}
return dog
person = get_person('jason', 18, 'male', '猛男', 999, 1000000)
dog = get_dog('小黑', '恶霸', 100, 1000)
person.get('person_atk')(pseson, dog)
'''面向对象和兴思想:数据与功能的绑定'''
编程思想
1.面向过程编程
过程及流程 面向过程就是按照固定的流程解决问题
需要例举出每一步的流程 并且随着步骤的深入 问题的解决越来越简单
ps:提出问题 然后指定出该问题的解决方案
2.面向对象编程
对象即容器 数据与功能的结合体(python中一切皆对象)
面向对象编程有点类似于造物主的感觉 我们只需要创造出一个个对象 至于该对 象将来会如何发展跟程序员没有关系 也无法控制
如 MOBA游戏中玩家操作的角色 只有基础属性 战绩的正负根据玩家操作 无法控 制
'''
两种编程思想没有优劣之分 需要结合实际需求而定
如果是注册 登陆 肯定是面向过程更合适
如果是游戏人物肯定是面向对象更合适
实际编程者两种思想是彼此交融的 只不过占比不同
'''
面向对象之类与对象
对象:数据与功能的结合体 对象才是核心
类:多个对象相同数据和功能的结合体 类主要是为了节省代码
'''
举例 不同物种进行分类
一个人 对象
一群人 人类(每个人都具有相同的特征 整合为一类)
一条狗 对象
一群狗 犬类(每条狗都具有相同的特征 整合为一类)
'''
现实生活中一般都是先有对象再有类
程序中如果想要产生对象 必须先定义类
类与对象的创建
面向对象并不是一门新技术 但是为了很好的区分开 针对面向对象设计了新的语法格式
python中一定要有类 才能借助于类产生对象
1.类的语法结构
class 类名:
'''类体代码注释'''
对象的公共数据
对象的公共功能
'''
class是定义类的关键字
类名的命名与变量名几乎一致 需要注意的是首字母推荐大写用于后续区分
数据:变量名与数据值的绑定 功能(方法)其实就是函数
'''
2.类的定义与调用
类在定义阶段就睡执行类体代码 但是属于类的局部名称空间 外界无法直接获取
class Student:
school_name = '清华大学'
def choice_course(self):
print('学生选课功能')
print(Student.__dict__)
print(Student.__dict__.get('school_name'))
print(Student.__dict__.get('choice_course'))
'''在面向对象中 类和对象访问数据或者功能 可以统一采用句点符'''
print(Student.school_name)
print(Student.choice_course)
'''类名加括号就会产生对象 并且没执行一次都会产生一个全新的对象'''
obj = Student()
obj1 = Student()
print(obj.__dict__)
print(obj.school_name)
Student.school_name = '哈尔滨佛学院'
print(obj.school_name)
'''数据和功能也可以统称为属性 数据>>>:属性名 功能>>>:方法'''
对象独有的数据
class Student:
school_name = '清华大学'
def choice_course(self):
print('学生选课功能')
obj = Student()
obj1 = Student()
'''推导流程1 对象手动添加独有的数据'''
print(obj.__dict__)
obj.__dict__['name'] = 'jason'
obj.__dict__['age'] = 18
print(obj.__dict__)
print(obj.name)
print(obj.age)
print(obj1.__dict__)
obj1.__dict__['name'] = 'kevin'
obj1.__dict__['age'] = 28
print(obj1.__dict__)
print(obj1.name)
print(obj1.age)
'''推导流程2 将添加对象独有的数据封装成函数'''
def init(obj, name, age):
obj.__dict__['name'] = name
obj.__dict__['age'] = age
stu1 = Student()
stu2 = Student()
init(stu1, 'jason', 18)
init(stu2, 'kevin', 28)
print(stu1.__dict__)
print(stu2.__dict__)
'''推导流程3 给学生对象添加独有数据的函数 只有学生对象才有资格调用'''
class Student:
school_name = '清华大学'
def init(obj, name, age):
obj.__dict__['name'] = name
obj.__dict__['age'] = age
def choice_course(self):
print('学生选课系统')
stu1 = Student()
Student.init(stu1, 'jason', 18)
stu2 = Student()
Student.init(stu2, 'kevin', 28)
print(stu1.__dict__, stu2.__dict__)
'''推导步骤4 init方法变形'''
class Student:
school_name = '清华大学'
def __init__(obj, name, age):
obj.__dict__['name'] = name
obj.__dict__['age'] = age
def choice_course(self):
print('学生选课系统')
stu1 = Student('jason', 18)
print(stu1.__dict__)
print(sut1.name)
'''推导步骤5 变量名修改'''
class Student:
school_name = '清华大学'
def init(self, name, age):
self.name = name
self.age = age
def choice_course(self):
print('学生选课系统')
stu1 = Student('jason', 18)
print(stu1.name)
print(stu1.school_name)
对象的独有功能
class Student:
school_name = '清华大学'
def init(self, name, age):
self.name = name
self.age = age
def choice_course(self):
print('学生选课系统')
stu1 = Student('jason', 18)
stu2 = Student('kevin', 28)
'''直接在全局定义功能'''
def eat():
print('正在吃东西')
stu1.eat = eat
stu1.eat()
'''只能将函数放在类中 但是类中的函数又是对象公共的
定义在类中的功能 默认就是绑定给对象使用的 谁来调用谁就是主人公
'''
class Student:
school_name = '清华大学'
def init(self, name, age):
self.name = name
self.age = age
def choice_course(self):
print('学生选课系统')
def eat(self):
print(f'{self.name}正在吃东西')
stu1 = Student('jason', 18)
stu2 = Student('kevin', 28)
stu1.eat()
stu2.eat()
stu1.name = 'tom'
stu1.hobby = 'read'
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY