面向对象和面向过程

面向过程

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

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

缺点:可扩展性差

面向对象

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

优点:可扩展性高

缺点:编写复杂

类与对象

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

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

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

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

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

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

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

最新文章

  1. 使用ab进行页面的压力测试
  2. 整理CSS引发的相关理论的梳理
  3. VRP
  4. MoleHill Getting Started AGAL(转)
  5. 深入理解js——函数和对象的关系
  6. 【Android】Eclipse Memory Analyzer 进行堆内存溢出分析
  7. git中进入带有空格的目录下的解决办法
  8. Linux内核的整体架构
  9. C#中ArrayList和string,string[]数组的转换
  10. (转)使用Migrations更新数据库结构(Code First )
  11. jstl中添加自定义的函数
  12. lightoj1057 - Collecting Gold (tsp问题)
  13. 初学coreData数据库读取不成功的问题
  14. python-增删改查
  15. HDU 1724 Ellipse 自适应simpson积分
  16. (26)A delightful way to teach kids about computers
  17. [swarthmore cs75] Compiler 5 – Egg-eater
  18. Linux的常用路由配置
  19. php创建桌面快捷方式实现方法
  20. php 传变量到 js 文件

热门文章

  1. Java实现 LeetCode 647 回文子串(暴力)
  2. Java实现 蓝桥杯 基础练习 闰年判断
  3. Java实现蓝桥杯方格计数
  4. Java 实现 蓝桥杯 历届试题 分糖果
  5. java实现第七届蓝桥杯压缩变换
  6. java代码(4)---guava之Immutable(不可变)集合
  7. 变分(图)自编码器不能直接应用于下游任务(GAE, VGAE, AE, VAE and SAE)
  8. workbench中如何导入.sql文件
  9. Php7安装pdo_pgsql,pgsql扩展
  10. 一个小小的即时显示当前时间的jqurey控件