面向对象和面向过程
面向过程
概念:将需要做的事流程化,并得到结果
优点:复杂问题流程化,进而简单化
缺点:可扩展性差
面向对象
概念:通过定义一个个对象,让对象去做需要做的事,最终得到结果
优点:可扩展性高
缺点:编写复杂
类与对象
定义类
在现实世界中:先有对象,再有类
世界上肯定是先出现各种各样的实际存在的物体,然后随着人类文明的发展,人类站在不同的角度总结出了不同的种类,如人类、动物类、植物类等概念
也就说,对象是具体的存在,而类仅仅只是一个概念,并不真实存在
在程序中,务必保证:先定义(类),后使用(产生对象)
这与函数的使用是类似的,先定义函数,后调用函数,类也是一样的,在程序中需要先定义类,后调用类
不一样的是,调用函数会执行函数体代码返回的是函数体执行的结果,而调用类会产生对象,返回的是对象
class关键字 类名:
pass
产生对象
对象=类名()
类
- 获取类的属性和方法
类.__dict__ - 类来调用属性和方法
- 通过dict来取(复杂,不用)
- 类名.属性/函数
对象
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