面向对象

一、认识对象

  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)

  

生前无需久睡,死后自会长眠,努力解决生活中遇到的各种问题,不畏将来,勇敢面对,加油,你是最胖的,哈哈哈
原文地址:https://www.cnblogs.com/panshao51km-cn/p/11240293.html