zoukankan      html  css  js  c++  java
  • Python之浅谈面向对象

    面向对象和面向过程

    面向过程

    概念:将需要做的事流程化,并得到结果

    优点:复杂问题流程化,进而简单化

    缺点:可扩展性差

    面向对象

    概念:通过定义一个个对象,让对象去做需要做的事,最终得到结果

    优点:可扩展性高

    缺点:编写复杂

    类与对象

    定义类
    在现实世界中:先有对象,再有类

    世界上肯定是先出现各种各样的实际存在的物体,然后随着人类文明的发展,人类站在不同的角度总结出了不同的种类,如人类、动物类、植物类等概念

    也就说,对象是具体的存在,而类仅仅只是一个概念,并不真实存在

    在程序中,务必保证:先定义(类),后使用(产生对象)

    这与函数的使用是类似的,先定义函数,后调用函数,类也是一样的,在程序中需要先定义类,后调用类

    不一样的是,调用函数会执行函数体代码返回的是函数体执行的结果,而调用类会产生对象,返回的是对象

    class关键字 类名:
    pass

    产生对象

    对象=类名()

    1. 获取类的属性和方法
      类.__dict__
    2. 类来调用属性和方法
      1. 通过dict来取(复杂,不用)
      2. 类名.属性/函数
    对象

    1.对象获取属性和方法
    对象.__dict__
    2.对象来调用属性和方法
    对象.属性/方法

    产生对象

    属性查找顺序

    -先从对象自身找------>类中找----->报错

    对象赋属性

    1.方式一:
    stu1=Student()
    stu1.name='tim'
    2.方式二(通过__init__):
    在类中定义该方法,方法上写一些参数
    在对象实例化产生对象时,在括号中传的值,会被传到__init__中

    绑定方法

    ​ 定义在类内部
    ​ 对象来调用,会自动把对象传过来,在方法内部就可以修改该对象

    一切皆对象

    L1=[1,2,3]
    class Student:
        pass
    print(type(L1))
    print(type(Student()))
    

    <class 'list'>
    <class 'main.Student'>

    都是对象

    人狗大战小游戏

    import random
    import time
    
    
    class Dog:
        lind = '藏獒'
    
        def __init__(self, name, atk, hp=100):
            self.name = name
            self.atk = atk
            self.hp = hp
    
        def attack(self, target):
            target.hp -= self.atk
            print(f'{self.name}攻击了{target.name}扣了{self.atk}血,还剩{target.hp}')
    
    
    class Human:
        def __init__(self, name, atk, hp=100):
            self.name = name
            self.atk = atk
            self.hp = hp
    
        def attack(self, target):
            target.hp -= self.atk
            print(f'{self.name}攻击了{target.name}扣了{self.atk}血,还剩{target.hp}')
    
    
    class Equip:
        equip_name = ['剑', '刀', '锏']
        equip_atk = [5, 15, 60]
    
    
    def get():
        dog_name = input('请输入狗名:').strip()
        dog_atk = int(input('请输入狗的攻击力:').strip())
        dog_hp = int(input('请输入狗的血量:').strip())
        human_name = input('请输入人名:').strip()
        human_atk = int(input('请输入人的攻击力:').strip())
        human_hp = int(input('请输入人的血量:').strip())
        dog1 = Dog(dog_name, dog_atk, dog_hp)
        man = Human(human_name, human_atk, human_hp)
        re_choice = input('按任意键随机抽取武器').strip()
        ran = random.randint(0, 2)
        print(f'您抽中了{Equip.equip_name[ran]}')
        man.atk += Equip.equip_atk[ran]
        return dog1, man
    
    
    dog1, man = get()
    res_choice = input('按任意键开始战斗 ').strip()
    while 1:
    
        choice = random.randint(1, 2)
        if choice == 1:
            man.attack(dog1)
            time.sleep(0.5)
        elif choice == 2:
            dog1.attack(man)
            time.sleep(0.5)
        if dog1.hp < 0:
            print(f'人{man.name}赢了')
            break
        if man.hp < 0:
            print(f'狗{dog1.name}赢了')
            break
    
    
  • 相关阅读:
    Win7旗舰版中的IIS配置asp.net的运行环境
    选中弹出层中内容
    在windows server 2003中配置ipad測試環境
    TFS 2012 Preview Quickstart
    Windows Azure Quick Start Hello World
    2013总结 和2014期望
    一个简单的.net写日志方法 可能的改进点
    基于Visual Studio的软件生命周期管理和持续交付 (二) 采用成熟度
    关于加班的那些事
    基于Visual Studio的软件生命周期管理和持续交付 (一) 前言
  • 原文地址:https://www.cnblogs.com/MrYang161/p/11414437.html
Copyright © 2011-2022 走看看