类和对象(day19整理)
目录
面对对象和面对过程编程
实际编程过程中,面向过程结合面向对象一起使用。
什么是面向对象
指的是一门编程思想
什么是面向过程编程
核心是'过程‘二字,过程指的是做事情的步骤,比如先做什么,在做什么
基于该编程思想编写程序,就好比一条工厂的流水线,一种机械式的思维方式
优点:逻辑清晰,复杂的问题流程化,进而简单化
缺点:可扩展性差
什么是面对对象编程
核心是’对象‘二字,对象指的是特征和技能的结合体
基于该编程思想编写程序,就好比在创造世界,一种上帝式的思维方式
优点:可扩展性高
缺点:编写程序的复杂程度要远高于面向过程编程思想
类
对象是特征和技能的结合体,类是一系列对象相同的特征和技能的集合体
类的定义
class 类名:
特征
技能
- 类名必须要遵循驼峰体
- 通过调用类名,来创造对象
定义类时发生的事情
类在定义时,会产生一个空的名称空间
会把类内部所有名字,扔进类的名称空间中
注意:类在定义阶段就已经产生好了名称空间,执行python文件时会执行类内部的代码
__dict__和.
.可以对类内部的特征进行增删改查的操作__dict__只能进行查的操作- 对象也有
__dict__
class OldStudent:
schoo = 'oldboy'
def learn(self):
print('learn')
# 查看类的名称空间内的所有名字
print(OldStudent.__dict__) # type:字典
# .可以对类中的名字进行修改,而__dict__不能
OldStudent.school = 'oldgirl'
print(OldStudent.school) # ‘oldgirl
对象
调用类即会产生对象,也叫实例化对象
名称空间
- 类的名称空间在定义阶段就已经产生了
- 对象的名称空间在调用类的时候产生
__init__函数
为了解决对象和对象之间特征和技能一样的问题产生,可以为对象初始化某些属性
- 在调用类时,自动触发该函数
class OldStudent:
school = 'oldboy' # 共有属性
def __init__(self,name,age): # 特有属性
self.name = name
self.age = age
def learn():
print('learn')
stu1 = OldStudent('wick',24) # 实例化对象
调用类发生的事情
首先产生一个空的对象,即产生'对象的名称空间'
自动触发
__init__把对象本身以及括号内的参数一并传给init函数
总结:调用类会产生一个对象,调用类的过程叫做类的实例化,产生的对象称之为类的一个实例
对象与类的查找顺序
- 对象,优先查找对象本身
- 类,对象中找不到就去类中找
- 报错,类中也找不到就报错
对象绑定方法的特殊之处
- 由类调用类内部的函数,该函数只是一个普通的函数,普通函数需要接受几个参数,就得传入几个参数
- 由对象来调用称之为对象的绑定方法,不同的对象调用该绑定方法,则会将不同的对象传入该绑定方法中
总结:对象绑定方法,是由对象来调用的额,特殊之处就是把对象当作第一个参数传入该方法中
python中一切皆对象
八大数据类型内置方法的实现都是通过定义类,然后实例化一个对象来实现的
英雄联盟小游戏练习
import random
import time
class Yasso:
camp = 'lonia'
def __init__(self,name):
self.name = name
self.atk = 48
self.armor = 15
self.health = 430
self.money = 1200
def attack(self, zed):
damage = self.atk - zed.armor
zed.health -= damage
print(f'''{self.name}攻击了{zed.name},伤害:-{damage}
{zed.name}剩余血量:{zed.health}\n''')
if zed.health <= 0:
return True
class Zed:
camp = 'shadow'
def __init__(self,name):
self.name = name
self.atk = 49
self.armor = 17
self.health = 445
self.money = 1200
def attack(self, yasso):
damage = self.atk - yasso.armor
yasso.health -= damage
print(f'''{self.name}攻击了{yasso.name},伤害:-{damage}
{yasso.name}剩余血量:{yasso.health}\n''')
if yasso.health <= 0:
return True
class Belt:
weapon_type = 'defence'
def __init__(self,name):
self.name = name
self.price = 1000
self.health = 380
def equip(self,obj):
obj.money -= self.price
obj.health += self.health
class BigSword:
weapon_type = 'attack'
def __init__(self,name):
self.name = name
self.price = 1200
self.atk = 60
def equip(self,obj):
obj.money -= self.price
obj.atk += self.atk
wick = Zed('火影劫')
tank = Yasso('快乐风男')
titan = Belt('巨人腰带')
storm = BigSword('暴风大剑')
print(f'''
玩家wick使用英雄{wick.name}
生命值:{wick.health}
攻击力:{wick.atk}
护甲:{wick.armor}
金币:{wick.money}\n''')
time.sleep(1.8)
print(f'''玩家tank使用英雄{tank.name}
生命值:{tank.health}
攻击力:{tank.atk}
护甲:{tank.armor}
金币:{tank.money}\n''')
time.sleep(1.8)
if wick.money >= storm.price:
wick.storm = storm
storm.equip(wick)
print(f'{wick.name}购买了{storm.name}')
time.sleep(1)
if tank.money >= titan.price:
tank.titan = titan
titan.equip(tank)
print(f'{tank.name}购买了{titan.name}')
time.sleep(1)
print(f'''
玩家wick使用英雄{wick.name}
生命值:{wick.health}
攻击力:{wick.atk}
护甲:{wick.armor}
金币:{wick.money}
装备:{wick.storm.name}\n''')
time.sleep(1.8)
print(f'''玩家tank使用英雄{tank.name}
生命值:{tank.health}
攻击力:{tank.atk}
护甲:{tank.armor}
金币:{tank.money}
装备:{tank.titan.name}\n''')
time.sleep(1.8)
while True:
rand = random.randint(1,3)
if rand == 1:
res = wick.attack(tank)
time.sleep(0.8)
if res:
print(f'''玩家wick使用{wick.name}很轻松的击杀了菜鸡玩家tank使用的{tank.name}''')
break
if rand == 2:
res1 = tank.attack(wick)
time.sleep(0.8)
if res1:
print(f'''玩家tank使用{tank.name}卑鄙无耻的侥幸击杀了玩家wick使用的{wick.name}''')
break
类和对象(day19整理)的更多相关文章
- java 类与对象基础整理
之前学习javaSE的时候,没有针对性地对对类与对象的一些基础进行整理,下面这些内容是笔记内容整理后的,希望以后自己可以通过这些博客时常复习! 一.类and对象的基础 类似于类的生命啊,类与对象的关系 ...
- Java面向对象类与对象整理
第一章 面向对象: 1.1 什么是面向过程: 遇到某件事的时候,思考 “我该怎么做”然后一步一步实现的过程 1.2 什么是面向对象: 遇到某件事的时 ...
- day10整理(面对对象,过程,类和对象)
目录 一 回顾 (一)定义函数 (二)定义函数的三种形式 1.空函数 2.有参函数 3.无参函数 (三)函数的返回值 (四)函数的参数 1.形参 2.实参 二 面向过程编程 三 面向对象过程 四 类和 ...
- 初识python中的类与对象
这篇博客的路线是由深入浅,所以尽管图画的花花绿绿的很好看,但是请先关注我的文字,因为初接触类的小伙伴直接看类的实现可能会觉得难度大,只要耐着性子看下去,就会有一种“拨开迷雾看未来”的感觉了. 一.py ...
- ios开发之OC基础-类和对象
本系列的文章主要来自于个人在学习前锋教育-欧阳坚老师的iOS开发教程之OC语言教学视频所做的笔记,边看视频,边记录课程知识点.建议大家先过一遍视频,在看视频的过程中记录知识点关键字,把把握重点,然后再 ...
- linkin大话面向对象--类和对象
我们每天在撸码,那么我们在敲什么东西呢?明显的我们在写类,写一个类,写一个接口,写某个接口里面写一些属性,在某个类里面写一个方法,然后以一个对象调用方法,对于j2ee来讲的话,可能还会写一些jsp,静 ...
- 孤荷凌寒自学python第三十四天python的文件操作对file类的对象学习
孤荷凌寒自学python第三十四天python的文件操作对file类的对象学习 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.close() 当一个file对象执行此方法时,将关闭当前 ...
- C++基础-类和对象
本文为 C++ 学习笔记,参考<Sams Teach Yourself C++ in One Hour a Day>第 8 版.<C++ Primer>第 5 版.<代码 ...
- Python 中的类与对象 初认识
一:类的声明 1类的关键字: 从第一天第一个项目起我们就接触过关键字,比如False True is not None return for while elif else import等等,这是语言 ...
随机推荐
- MySQL 分页查询优化
有时在处理偏移量非常大的分页时候查询时,例如LIMIT 1000,10这样的查询,这时MySQL需要查询1010条记录然后只返回最后10条,前面1000条记录都被抛弃,这样的代价非常高.要优化这种查询 ...
- 使用 Docker 让部署 Django 项目更加轻松
作者:HelloGitHub-追梦人物 文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 之前一系列繁琐的部署步骤让我们感到痛苦.这些痛苦包括: 要去服务器上执行 n 条命令 ...
- Redis与数据库数据一致性
文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 可能谈到保持Redis与Mysql双库的数据一致性,可能很多人最先想到的方案就是读请求和写请求串行化,串到一个 ...
- spring源码分析系列4:ApplicationContext研究
ApplicationContext接口 首先看一下一个最基本的上下文应该是什么样子 ApplicationContext接口的注释里写的很清楚: 一个基本applicationContext应该提供 ...
- 定期从Docker上部署的MySQL备份数据
前段时间公司停电,正巧赶上周一领导要开会要过一遍项目,然而项目所依赖的MySQL数据库是直接部署在宿主机,且因为各人部署方式不同的原因,花了很久才在开会前启动起来.于是开完会后,我第一件事就是把原先依 ...
- selenium + python + firefox 测试环境的搭建与配置
对于做UI自动化,如果是纯编写一段自动化测试程序,那么后续的维护成本会较高.这种情况下,借助 selenium 这款自动化系测试工具,辅助于自己编写部分脚本,将是个不错的选择.selenium 本身支 ...
- 服务器时间误差导致的google sign-in后台验证错误(远程调试java程序)
https://developers.google.com/identity/sign-in/web/backend-auth import com.google.api.client.googlea ...
- Java 操作Word表格——创建嵌套表格、添加/复制表格行或列、设置表格是否禁止跨页断行
本文将对如何在Java程序中操作Word表格作进一步介绍.操作要点包括 如何在Word中创建嵌套表格. 对已有表格添加行或者列 复制已有表格中的指定行或者列 对跨页的表格可设置是否禁止跨页断行 创建表 ...
- 虚拟机上安装centos8.0
一.准备宿主机 为了培训Hadoop生态的部署和调优技术,需要准备3台虚拟机部署Hadoop集群环境,能够保证HA,即主要服务没有单点故障,可执行基本功能,完成小内存模式的参数调整. 1.1.准备安装 ...
- 微信小程序与用户交互
微信小程序与用户交互 一.显示消息提示框 wx.showToast({属性名:属性值}) 自定义一个提示框,时间到了会自动关闭 wx.showToast({ title:"成功", ...