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

posted @ 2019-08-26 19:33  暗夜幻羽  阅读(131)  评论(0编辑  收藏  举报