day22.面向对象初识
1.面向对象引入
先来创建一个小游戏:人狗大战
# 定义一个狗
def Gog(name,blood,aggr,kind):
dog = {
'name':name,
'blood':blood,
'aggr':aggr,
'kind':kind
}
return dog # 定义一个人
def Person(name,blood,aggr,kind):
person ={
'name':name,
'blood':blood,
'aggr':aggr,
'kind':kind
}
return person # 定义一个人的技能 打
def attack(person,dog):
dog['blood'] -= person['aggr']
print('{}被打了,掉了{}的血'.format(dog['name'],person['aggr'])) # 定义一个狗的技能 咬
def bite(dog,person):
person['blood'] -= dog['aggr']
print('{}被咬了,掉了{}的血'.format(person['name'],dog['aggr'])) yellow = Gog('dahuang',1000,100,'jinmao')
alex = Person('alex',800,50,'战士') bite(yellow,alex)
# "alex被咬了,掉了100的血"
bite(alex,yellow)
# "dahuang被咬了,掉了50的血" 这里就出现了一些问题,狗咬狗
以上方法会出现 “人咬狗”的错误。衍生了人狗大战第二版
# 定义一个狗
def Gog(name,blood,aggr,kind):
dog = {
'name':name,
'blood':blood,
'aggr':aggr,
'kind':kind
}
def bite(person):
person['blood'] -= dog['aggr']
print('{}被咬了,掉了{}的血'.format(person['name'], dog['aggr']))
dog['bite'] = bite # 将狗的技能作为一个字典参数加进来
return dog # 定义一个人
def Person(name,blood,aggr,kind):
person ={
'name':name,
'blood':blood,
'aggr':aggr,
'kind':kind
}
def attack(dog):
dog['blood'] -= person['aggr']
print('{}被打了,掉了{}的血'.format(dog['name'], person['aggr']))
person['attack'] = attack # 将人的打技能作为字典参数传进来
return person yellow = Gog('dahuang',1000,100,'jinmao')
alex = Person('alex',800,50,'战士') print(yellow) # 在狗,大黄内自带一个函数,需要传参:被咬的人
# {'name': 'dahuang', ...'bite': <function Gog.<locals>.bite at 0x0000027FAED2ABF8>}
yellow['bite'](alex)
# 给大黄的咬的技能函数加入一个参数人,一样可以得到结果
# alex被咬了,掉了100的血
2.面向对象编程理解
- 所谓模子 就是类 抽象的,例如上面的函数人。例如人类
- 但是根据 模子刻出来的就是对象,例如 根据狗刻出来的yellow(大黄)。人类中的科比,姚明为对象
- 先有类再有对象
3.面向对象初识
# 自定义类
class Person: # 类名
country = 'China' # 创建一个类属性(静态属性), def __init__(self,*args): # self 类似于一个可以存储很多属性的字典 (初始化方法,self是必须传参数)
# print(self.__dict__) # 此处可看到self是一个空字典
self.name = args[0] # name,hp,aggr,sex类似于在字典里放置属性
self.hp = args[1]
self.aggr = args[2]
self.sex = args[3]
print(self.__dict__) # 此处可看到字典多了key,value
# print(id(self)) # 内存地址与 'alex' 内存地址一样
def work(self,n): # self 是一个必要的任意参数,一般叫self。 (函数写在类中叫方法,一般必须传第一个self参数,后面其他参数)
print('{}走走走,走了{}步'.format(self.name,n)) alex = Person('二狗子',100,50,'男') #alex对象 实例化。 执行类 + 括号就是在调用__init__(self)方法
print(alex.__dict__) # 此处
# print(id(alex))
Person.work(alex,5) # 调用方法 类名.方法名(对象名)
alex.work(10) # 等价于 Person.work(alex)
print(Person.country) alex.__dict__['name'] = '中华田园犬'
print(alex.name)
alex.name = '土狗'
print(alex.__dict__['name']) # alex.name == alex.__dict__['name'] 增删 # 类的属性是不可以进行修改的
# 对象可以做的事:
# 1.查看属性(alex.name),
# 2.调用方法(alex.work())
# 3.对于对象的增删改查可以通过__dict__方法进行或者 对象.属性 # 类名可以做的事:
# 1.实例化对象
# 2.调用方法,需要自己传递self参数
# 3.调用类属性,静态属性
# 4.__dict__对于类中的属性等只能看不能操作
####################
{'name': '二狗子', 'hp': 100, 'aggr': 50, 'sex': '男'}
{'name': '二狗子', 'hp': 100, 'aggr': 50, 'sex': '男'}
二狗子走走走,走了5步
二狗子走走走,走了10步
China
中华田园犬
土狗
4.面向对象练习
4.1 人狗大战面向对象版
class Dog:
def __init__(self,name,blood,aggr,kind):
self.na = name
self.hp = blood
self.gong = aggr
self.kin = kind
def bite(self,person):
# 狗咬人,人掉血
person.hp -= self.gong
if person.hp <= 0:
print('{}咬了{},{}被咬死了'.format(self.na,person.na,person.na))
else:
print('{}咬了{},掉了{}血'.format(self.na,person.na,self.gong)) class Person:
def __init__(self,name,blood,aggr,sex):
self.na = name
self.hp = blood
self.gong = aggr
self.se = sex
def attrck(self,ddog):
# 人打狗,狗掉血
ddog.hp -= self.gong
if ddog.hp <= 0:
print('{}打了{},{}被打死了'.format(self.na,ddog.na,ddog.na))
else:
print('{}打了{},掉了{}血'.format(self.na,ddog.na,self.gong)) dijia = Person('奥特曼',500,50,'man')
yellow_dog = Dog('大黄',300,20,'teddy') yellow_dog.bite(dijia)
dijia.attrck(yellow_dog)
"""
大黄咬了奥特曼,掉了20血
奥特曼打了大黄,掉了50血
4.2 圆的面积和周长
class circle:
def __init__(self,banjin):
self.bj = banjin
def zhouchang(self):
return self.bj * 2 * 3.14
def mianji(self):
return self.bj ** 2 * 3.14 ab = circle(2)
print(ab.zhouchang())
print(ab.mianji())
小结:
- 当有几个函数需要反复传入相同参数的时候,可以考虑使用面向对象
- 非常明显的处理一类事物,这些食物具有相同的属性和功能
- 参数都是对象的属性
day22.面向对象初识的更多相关文章
- day22 01 初识面向对象----简单的人狗大战小游戏
day22 01 初识面向对象----简单的人狗大战小游戏 假设有一个简单的小游戏:人狗大战 怎样用代码去实现呢? 首先得有任何狗这两个角色,并且每个角色都有他们自己的一些属性,比如任务名字nam ...
- python之面向对象初识
一.面向对象初识 1.结构上 面向对象分成两部分:属性.方法 class A: name = 'xiaoming' # 静态属性.静态变量.静态字段. def func1(self): # 函数.动态 ...
- python基础(17)继承类和面向对象初识
1.继承类 class Lm: money = 1000000 house = 5 def driver(self): print('会开车') class Mcb(Lm): def about_me ...
- day06_雷神_面向对象初识
day_06 递归函数 自己用自己.一般递归100多次,都没有解决的问题,放弃递归. count = 0 def func1(): global count count += 1 print(coun ...
- 《Python》 面向对象初识
一.面向对象初识: 1.结构上理解:类由两部分组成 class A: # class是类的关键字,类名首字母默认大写 name = 'alex' # 静态属性,静态变量,静态字段 def func ...
- python递归 及 面向对象初识及编程思想
递归 及 面向对象初识及编程思想 一.递归 1.定义: 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. (1)递归就是在过程或函数里调用自身: (2)在使用递 ...
- python基础学习笔记——面向对象初识
面向对象初识 python中一切皆对象. 类有两种: 新式类:在py3中所有类都是新式类 经典类:在py2中只有类本身继承了object类才叫做新式类,默认是经典类 class Person: cou ...
- Python中面向对象初识到进阶
面向对象初识到进阶 # 面向对象结构: # class 类名: # def __init__(self,参数1,参数2): # self.对象的属性1 = 参数1 # self.对象的属性2 = 参数 ...
- Python面向对象01 /面向对象初识、面向对象结构、类、self、实例化对象
Python面向对象01 /面向对象初识.面向对象结构.类.self.实例化对象 目录 Python面向对象01 /面向对象初识.面向对象结构.类.self.实例化对象 1. 面向对象初识 2. 面向 ...
随机推荐
- 八.django模型系统(二)之常用查询及表关系的实现
Ⅰ.常用查询 1.几个概念 每一个django模型类,都有一个默认的管理器,objects,查询就是依赖于objects管理器进行的(在创建时就被添加了). QuerySet表示数据库中对象的列表( ...
- Matrix-tree 定理的一些整理
\(Matrix-tree\) 定理用来解决一类生成树计数问题,以下前置知识内容均是先基于无向无权图来介绍的.有关代数余子式的部分不是很明白,如果有错误还请指出-- 部分内容参考至:\(Blog\_1 ...
- jquery-防多店铺购物车结算全选,单选,及删除,价格计算
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- Redis 高级部分
一.主从复制 image.png Rdis 的主从复制特点 image.png 1. 配置主从 实现方式同样有两种: 命令方式和配置文件方式 命令方式 只需要在从服务器上执行如下命令即可 sl ...
- Helm包管理工具(简介、安装、方法)
认识Helm 每次我们要部署一个应用都需要写一个配置清单(维护一套yaml文件),但是每个环境又不一样.部署一套新的环境成本是真的很高.如果我们能够使用类似于yum的工具来安装我们的应用的话那就太好了 ...
- MapReduce-CombineTextInputFormat 切片机制
MapReduce 框架默认的 TextInputFormat 切片机制是对任务按文件规划切片,如果有大量小文件,就会产生大量的 MapTask,处理小文件效率非常低. CombineTextInpu ...
- OAuth2
OAuth2: 适合To C的应用场景, 比如我们开发一个app, 可以借用微信/微博用户认证开放接口, 达到免注册登陆, 企业内部系统没有必要引入. OAuth2的步骤较多, 角色也较多, 涉及到a ...
- element-ui多选框模糊搜索输入文字闪动问题
.el-select__tags { .el-select__input { width: 50px !important; } } 添加这段代码即可 <el-select v-model=&q ...
- JAVA基础---入门
JDK的安装和环境变量的配置: 在Oralce官网下载好符合自己电脑配置的JDK后开始配置环境变量. 找到下载好的JDK的位置,复制,然后在环境变量里创建“JAVA_HOME”,粘贴:在path里用“ ...
- Python:正则表达式(二):如何使用re.search()返回的匹配对象中的具体内容呢??
在上一篇中讲述了re.seach()会返回一个对象格式的数据,如下:<_sre.SRE_Match object; span=(16, 24), match='${phone}'> 那么问 ...