基础面向对象

一面向对象初识:

除了面向对象,还有个面向过程,那什么是面向过程呢?

面向过程:

面向过程是一种编程思想,就是将代码流程化了,其核心就是过程,就是解决问题的步骤,即先做什么再做什么。

优点:将复杂的问题流程化了,简单化

缺点:扩展性低,复用性低,维护性低

面向对象:

它也是一种编程思想,其核心就是对象二字,不再纠结其过程,设计对象去获取想要的。

优点:扩展性高,复用性高,维护性高

缺点:解决问题的复杂度较高

应用场景:面向对象应该应用于直接面向客户的,要求灵活性高的比如qq,微信,

而面向过程应该应用于不经常更改的,比如linux的内核

 

类与对象:

对象:就是具备某种行为和特征的结合体,是确切存在的

类:就是一系列具有相同特征和行为的对象的结合体,是一种抽象的存在

在生活中是先有对象再有类,而在编程中是先有类在有对象。

在类中特征也就是可以说是属性,行为就是函数

类名必须要起到见名知意,而且采用大驼峰写法,首字母大写

例子:

class Person:

  pass

创建对象

p = Person()

print(p)  # <__main__.Person object at 0x10b11d588>

对象的属性操作

要为其增加属性可以在创建对象后,使用点语法变量名加. 

p.name = 'lw'

print(p.name)  # 获取同样是点语法

对象的查找顺序

先找对象自身,然后再找对象所在的类。

print(对象.__dict__)访问的当前对象的所有属性

print(对象.__class__)访问的当前对象所在类信息

__init__初始化方法:

这个是一个初始化方法,本质上就是一个函数。

其特点有:

  1.它会类实例化产生对象时自动执行

  2.并会将对象作为第一个参数自动传入

  3.该函数没有返回值

功能:就是给对象赋予初始值

class Dog:
    def __init__(self,kind,color,age):
        self.kind = kind
        self.color = color
        self.age = age

d1 = Dog("二哈","黑白",1)
d1 = Dog("泰迪","棕色",2)

 

对象的精髓就是将数据和处理数据的函数整合到一起,这样对象既能拿到需要处理的数据又能拿到处理数据的函数

 

绑定方法:

绑定方法也可以称为绑定函数

绑定方法里面分为:

对象绑定方法:

特点:1.会在对象调用该函数时,自动将对象作为第一个参数传入

   2.使用类名来调用时就是一个普通函数,有几个参数就要传入几个参数

类绑定方法:

  @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.q_hurt, 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.e_hurt,enemy.blood))

        if enemy.blood <= 0:
            print("%s被%s使用E技能击杀了" % (enemy.name, self.name))


h1 = Hero("亚索",20,2000,100,600,0,1000)
h2 = Hero("妲己",20,2000,100,600,500,1000)
h3 = Hero("鲁班",20,1500,700,100,200,300)
h4 = Hero("蔡文姬",20,2000,10,0,0,10)


#
# h1.attack(h2)
# h2.Q(h1)
# h2.E(h1)
# h2.W(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(0.5)

 

上一篇:Bomb Enemy


下一篇:python红蓝英雄大乱斗(面向对象实现)