zoukankan      html  css  js  c++  java
  • 基础面向对象

    一面向对象初识:

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

    面向过程:

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

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

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

    面向对象:

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

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

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

    应用场景:面向对象应该应用于直接面向客户的,要求灵活性高的比如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)
  • 相关阅读:
    添加了tabBar之后就不能使用wx.navigateTo跳转页面
    nodejs的安装及创建项目
    人名币转大写
    C#后台去除HTML标签
    自动化测试中excel的使用
    ddt方法介绍
    requests返回值
    requests提供的get方法,有几个常用的参数
    serveragent组件含义
    jmeter使用PerfMon Metrics Collector的图表分析
  • 原文地址:https://www.cnblogs.com/xinfan1/p/11240155.html
Copyright © 2011-2022 走看看