一、认识对象
1.什么是对象?
万物皆对象,桌子,板凳,木头等我们都可认为是对象。
2.面向对象是什么?
面向对象(Object Oriented,OO)是软件开发方法。是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。
二、类的介绍及与对象的联系
类即类别,类型的意思。类是一系列对象的结合体。
类的语法介绍:
class 类的名称:
# 类中的内容
# 类的名称首字母要大写,我们可以称为大驼峰体
创建对象的语法:
class Person:
pass
# 创建对象
d = Person()
在现实生活中,先有对象再有类,
在编程过程中,先有类再有对象。
三、属性查找
会先从自己的名称空间里找age,找不到则去类中找,类也找不到就找父类...最后都找不到就抛出异常.
__init__方法介绍:
__init__是初始化方法,其本质也是一个函数
特点:创建类的对象时,会自动执行__init__方法,会自动将对象作为第一个参数传入,参数名称为self。特征是给对象赋初始值。
四、绑定与非绑定对象的方法
在默认情况下类中的方法都是对象绑定方法,特殊的地方在于当使用对象调用该函数时会自动传入对象本身,作为第一参数,当使用类名来调用时他就是一个普通函数,有几个参数就得传几个参数。
类的绑定方法:
类的绑定方法用@classmethod来装饰,特殊之处在于不管类还是对象调用,会自动传入类本身作为第一个参数。
非绑定方法: 也叫静态方法,不需要访问类的数据,也不需要访问对象的数据。语法:@staticmethod
五、对象交互练习
模拟王者荣耀
import random
import time
class Hero:
def __init__(self, name, level, blood, att, q_hurt, w_hurt, e_hurt):
# 简便写法
lcs = locals()
lcs.pop('self')
self.__dict__.update(lcs)
def attack(self, enemy):
enemy.blood -= self.att
print('%s对%s释放了普通攻击造成了%s的伤害 敌人剩余血量%s' % (self.name, enemy.name,self.att, enemy.blood))
if enemy.blood < 0:
print('%s被%s使用普通攻击击杀了' % (enemy.name, self.name))
def Q(self, enemy):
enemy.blood -= self.q_hurt
print('%s 对%s释放了Q造成了%s的伤害 敌人剩余血量%s' % (self.name, enemy.name,self.att, enemy.blood))
if enemy.blood <= 0:
print('%s被%s使用q技能击杀了' % (enemy.name, self.name))
def W(self, enemy):
enemy.blood -= self.w_hurt
print("%s对%s释放了W 造成了%s的伤害 敌人剩余血量%s" % (self.name, enemy.name, self.w_hurt, enemy.blood))
if enemy.blood <= 0:
print("%s被%s使用W技能击杀了" % (enemy.name, self.name))
def E(self, enemy):
enemy.blood -= self.e_hurt
print('%s 对%s释放了E造成了%s的伤害 敌人剩余血量%s' % (self.name, enemy.name,self.att, enemy.blood))
if enemy.blood <= 0:
print('%s被%s使用e技能击杀了' % (enemy.name, self.name))
h1 = Hero('亚瑟', 20, 34, 56, 78, 90, 900)
h2 = Hero('鲁班', 26, 300, 59, 100, 600, 90)
h3 = Hero('妲己', 300, 500, 56, 78, 40, 900)
h4 = Hero('铠', 350,600, 60, 78, 100, 900)
# h1.attack(h2)
# h2.Q(h1)
# h2.W(h1)
# h2.E(h1)
# 从字典中随机拿出一个值
def random_hero(heros):
hero_index = random.randint(1, len(heros))
return heros[hero_index]
while True:
# 把所有的攻击方法都放在字典里,为了随机取出一个
funcs = {1: Hero.Q, 2: Hero.W, 3: Hero.E, 4: Hero.attack}
func_index = random.randint(1, 4)
func = funcs[func_index]
# 把所有的英雄方法装到字典里,为了随机取出一个
heros = {1: h1, 2: h2, 3: h3, 4: h4}
hero = random_hero(heros)
# 剩余的英雄们
other_heros = {}
new_index = 1
for k, v in heros.items():
if v != hero:
other_heros[new_index] = v
new_index += 1
# 从剩余的英雄中随机挑出一个英雄来挨打
enemy = random_hero(other_heros)
# 打他
func(hero, enemy)
if enemy.blood <= 0:
break
time.sleep(1)