• 目录

    • 编程思想

      • 面向对象
      • 面向过程  
    • 对象与类的概念
    • 对象与类的创建
    • 对象的实例化方法-独有数据
  • 编程思想

   1.面向对象

    1.1. 面向对象前戏

案例:人狗大战

# 需求:人狗大战
# 1.'创造'出人和狗
步骤1: 模拟一个个人和狗
# person1 = { 
# 'name': 'jason',
# 'attack_val': 800,
# 'life_val': 2000
# }
# person2 = {
# 'name': 'kevin',
# 'attack_val': 100,
# 'life_val': 1200
# }
# dog1 = { 
# 'name': '小黑狗',
# 'd_type': '泰迪',
# 'attack_val': 50,
# 'life_val': 800
# }
# dog2 = { 
# 'name': '小花狗',
# 'd_type': '哈士奇',
# 'attack_val': 800,
# 'life_val': 8000
# }

# 步骤二 封装函数:存在的问题数据与功能之间互相调用
# 面向对象:将特定的数据与特定的功能绑定

def get_person(name, gender, age, p_type, attack_val, life_val):
person_obj = {
'name': name,
'gender': gender,
'age': age,
'p_type': p_type,
'attack_val': attack_val,
'life_val': life_val
}
return person_obj


# p1 = get_person('jason', 'male', 18, 8000, 80000)
# p2 = get_person('kevin', 'female', 28, 10, 80)
def get_dog(name, d_type, attack_val, life_val):
dog_obj = {
'name': name,
'd_type': d_type,
'attack_val': attack_val,
'life_val': life_val
}
return dog_obj


# d1 = get_dog('小黄狗','泰迪',800, 5000)
# d2 = get_dog('小花狗','哈士奇',100, 200)

步骤三:将特定的数据与特定功能绑定

def person_attack(person_obj, dog_obj):
print('即将被攻击的狗:%s 当前血量:%s' % (dog_obj.get('name'), 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.get('life_val')))


def dog_attack(dog_obj, person_obj):
print('即将被攻击的人:%s 当前血量:%s' % (person_obj.get('name'), 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.get('life_val')))


# 调用产生人和狗的函数
p1 = get_person('jason', 'male', 18, '猛男', 8000, 90000)
p2 = get_person('kevin', 'female', 28, '淑女', 10, 200)
d1 = get_dog('小黄狗', '恶霸犬', 800, 8000)
d2 = get_dog('小黑狗', '巴哥犬', 200, 500)
# 调用攻击彼此的函数
# person_attack(p1, d1)
dog_attack(d2, p2)

 

    1.2 定义:将特定的数据与特定的功能相绑定   

   2.面向过程

    2.1.定义:按照流程达到一些列想要实现的结果

   3.面向对象与面向过程的编程思想没有优劣之分,多数情况下是共同存在

  • 对象与类的概念

   1.对象的概念:将特定数据与功能相结合的存储容器

   2.类的概念:将多个对象具有的相同数据与功能结合体的存储容器

    2.1 类的作用:节省代码(先有类才有对象)

   3.区分:

    3.1 对象是存储不同数据与功能的结合体

    3.2 类是存储相同数据与功能的对象的结合体

  • 对象与类的创建

   1.类的语法:

    1.1 关键字:class

    1.2 类名 :类名与变量名相似,采取'大驼峰'的形式命名

    1.3 类体代码(在定义阶段就会执行-与函数的区别):共同的数据与方法

   2.类与对象的创建:类名点__dict__(数据类型是字典)

class Computer:
name = '电脑' # 数据

def use_computer(self):
print(f'{self}在使用电脑')

print(Computer.__dict__) # 字典类型 查看名称空间
print(Computer.__dict__['name']) # 电脑
print(Computer.name) # 电脑
print(Computer.__dict__.get('use_computer')) # <function Computer.use_computer at 0x000001FD71945288>
Computer.use_computer('students') # students在使用电脑

   3.对应键值对的值修改:类名.字典k键 = 字典v值

class Computer:
name = '电脑' # 数据 def use_computer(self):
print(f'{self}在使用电脑')

Computer.name = '键盘' # 改值 等同于Computer.__dict__.['name']
 print(Computer.name) # 键盘
  • 对象的实例化方法-独有的数据

   1.实例化:类名加括号

    1.1 新增键值对

class Computer:
name = '电脑' # 数据 def use_computer(self):
print(f'{self}在使用电脑')
com1 = Computer()
com2 = Computer()
print(com1.name) # 电脑
print(com2.name) # 电脑
print(com1) # <__main__.Computer object at 0x000002097DC7AE48>
print(com2) # <__main__.Computer object at 0x000002097DC7EA88>
print(com1.__dict__) # {}
print(com2.__dict__) # {}
class Computer:
name = '电脑' # 数据 def use_computer(self):
print(f'{self}在使用电脑')
com1 = Computer()
com1.__dict__['type'] = '联想'
print(com1.__dict__) # {'type': '联想'}
print(com1.type) # 联想

    1.2 将新增键值对封装成函数

class Computer:
name = '电脑' # 数据 def use_computer(self):
print(f'{self}在使用电脑')
com1 = Computer()
2. 将新增键值对封装成函数
def init(com1, type, brand):
com1.__dict__['type'] = type
com1.__dict__['brand'] = brand init(com1, '笔记本', '联想')
print(com1.__dict__) # {'type': '笔记本', 'brand': '联想'}

    1.3 将函数封装到类中

3 封装函数
class Computer:

def __init__(self, type, brand):
self.type = type # 等于与com1.__dict__['type'] = type
self.brand = brand # com1.__dict__['brand'] = brand
name = '电脑' # 数据

def use_computer(self):
print(f'{self}在使用电脑')

com1 = Computer('笔记本', '联想') # {'type': '笔记本', 'brand': '联想'}
print(com1.type) # 笔记本

 

python编程思想及对象与类的更多相关文章

  1. 33.JAVA编程思想——JAVA IO File类

    33.JAVA编程思想--JAVA IO File类 RandomAccessFile用于包括了已知长度记录的文件.以便我们能用 seek()从一条记录移至还有一条:然后读取或改动那些记录. 各记录的 ...

  2. 【系列】Python编程思想(1):Python简介与开发环境搭建

    李宁老师的 开始学习.   本系列文章深入介绍了Python的各种技术,堪称是目前最全的Python教程.主要目的是让读者可以了解Python的各种核心技术,包括各种Python函数库.本教程使用Py ...

  3. 从0开始的Python学习012数据结构&对象与类

    简介 数据结构是处理数据的结构,或者说,他们是用来存储一组相关数据的. 在Python中三种内建的数据结构--列表.元组和字典.学会了使用它们会使编程变得的简单. 列表 list是处理一组有序的数据结 ...

  4. JS基础语法---编程思想和对象

    编程思想: 把一些生活中做事的经验融入到程序中 面向过程:凡事都要亲力亲为,每件事的具体过程都要知道,注重的是过程 面向对象:根据需求找对象,所有的事都用对象来做,注重的是结果 面向对象特性: 封装, ...

  5. Python - 面向对象编程 - 什么是对象和类

    面向对象编程 Object Oriented Programming,简称 OOP,是一种程序设计思想 OOP 把对象作为程序的基本单元,一个对象包含了数据和操作数据的方法 Python里面有一句话: ...

  6. Python学习第十五课——类的基本思想(实例化对象,类对象)

    类的基本思想 类:把一类事物的相同的特征和动作整合到一起就是类类是一个抽象的概念 对象:就是基于类而创建的一个具体的事物(具体存在的)也是特征和动作整合到一块 对象写法 # 对象写法 def scho ...

  7. 《Java编程思想》读书笔记-类与对象

    欢迎各位读者关注我的微信公众号,共同探讨Java相关技术.生命不止,学习不休! 也许你慢慢地对程序有了这样的认识:程序只是一些列带有方法的对象的组合,这些方法以其它对象为参数,可在任何地方返回,并发送 ...

  8. Java编程思想学习(五) 复用类

    1.继承与组合 复用类的方法有两种:继承与组合.继承就不多说了,组合就是直接在类中new一个对象. 数组也是对象,使用数组也是组合的一种. 2.初始化基类 当创建一个导出类的对象时,该对象包含一个基类 ...

  9. java编程思想,对象导论

    程序设计的本质就是使用编程语言解决某一类具体问题.对问题的定义叫建模,例如定义问题域中的各种名词,动作,结果等.针对具体的问题提出的解决方案叫算法. 面向对象程序设计的挑战之一,就是在问题空间的元素和 ...

随机推荐

  1. 手把手带你自定义 Gradle 插件 —— Gradle 系列(2)

    请点赞加关注,你的支持对我非常重要,满足下我的虚荣心. Hi,我是小彭.本文已收录到 GitHub · Android-NoteBook 中.这里有 Android 进阶成长知识体系,有志同道合的朋友 ...

  2. 聊聊C#中的Visitor模式

    写在前面 Visitor模式在日常工作中出场比较少,如果统计大家不熟悉的模式,那么它榜上有名的可能性非常大.使用频率少,再加上很多文章提到Visitor模式都着重于它克服语言单分派的特点上面,而对何时 ...

  3. 2. springboot加载配置参数顺序

    加载顺序依次是:1.jar的classes里面的application.properties 2.当前路径下config里面的application.properties 3.jar的classes里 ...

  4. python之数据类型的内置方法(set、tuple、dict)与简单认识垃圾回收机制

    目录 字典的内置方法 类型转换 字典取值 修改值 计算字典长度 成员运算 删除元素 获取元素 更新字典 快速生成字典 setdefault()方法 元组的内置方法 类型转换 索引与切片操作 统计长度 ...

  5. vue同时监听多个参数变化

    computed: { // 同时监听多个参数 toWatch() { const { params1, params2 } = this.observeObj; return { params1, ...

  6. 深度学习与CV教程(4) | 神经网络与反向传播

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/37 本文地址:http://www.showmeai.tech/article-det ...

  7. 1.为什么要从古典概率入门概率学《zobol的考研概率论教程》

    在入门概率论与数理统计这门课中,刚开始我们都会从古典概率开始学习,为什么要选择它呢?这是因为古典概率作为一种将生活中的事情简化为有限种情况,并假设它们的发生可能差不多的手段,十分的好用且简洁. 这里我 ...

  8. numpy学习笔记 01

    NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库. NumPy 是一个运行速度非常快的数学库 ...

  9. 雪花算法及微服务集群唯一ID解决方案

    雪花算法(SnowFlake) 简介 现在的服务基本是分布式.微服务形式的,而且大数据量也导致分库分表的产生,对于水平分表就需要保证表中 id 的全局唯一性. 对于 MySQL 而言,一个表中的主键 ...

  10. python基础知识-day7(文件操作)

    1.文件IO操作: 1)操作文件使用的函数是open() 2)操作文件的模式: a.r:读取文件 b.w:往文件里边写内容(先删除文件里边已有的内容) c.a:是追加(在文件基础上写入新的内容) d. ...