面向对象和面向过程

面向过程

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

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

缺点:可扩展性差

面向对象

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

优点:可扩展性高

缺点:编写复杂

类与对象

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

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

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

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

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

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

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

Python之浅谈面向对象的更多相关文章

  1. python进阶_浅谈面向对象进阶

    python进阶_浅谈面向对象进阶 学了面向对象三大特性继承,多态,封装.今天我们看看面向对象的一些进阶内容,反射和一些类的内置函数. 一.isinstance和issubclass  class F ...

  2. Python 基于python+mysql浅谈redis缓存设计与数据库关联数据处理

    基于python+mysql浅谈redis缓存设计与数据库关联数据处理 by:授客  QQ:1033553122 测试环境 redis-3.0.7 CentOS 6.5-x86_64 python 3 ...

  3. 在Objective-C中浅谈面向对象

    接触面向对象也有一段时间了,当时是通过C++学习的OOP,后来又接触到了PHP和Java.每种OOP的语言在面向对象上或多或少都会有不同的地方,现在在学习OC的面向对象部分,又感觉到OC面向对象的特点 ...

  4. .NET项目开发—浅谈面向对象的纵横向关系、多态入口,单元测试(项目小结)

    阅读目录: 1.开篇介绍 2.使用委托消除函数串联调用 2.1.使用委托工厂转换两个独立层面的对象 3.多态入口(面向对象继承体系是可被扩展的) 4.多态的受保护方法的单元测试(Protected成员 ...

  5. 【python】浅谈包

    python中的包可以理解为模块的集合.每个包也既可以为单包也可以有多个小包组成. Python中的package定义很简单,其层次结构与目录的层次结构相同,但是每个package必须包含一个__in ...

  6. 【python】浅谈encode和decode

    对于encode和decode,笔者也是根据自己的理解,有不对的地方还请多多指点. 编码的理解: 1.编码:utf-8,utf-16,gbk,gb2312,gb18030等,编码为了便于理解,可以把它 ...

  7. Java系列1 -- 浅谈面向对象

    也许每一个计算机专业的人,在大学学习java的时候,老师开始时都会说这么一句话,"Java是一门面向对象的语言".那么面向对象到底是什么,他有什么好处,或者他比其他流行的语言C/C ...

  8. Python实例浅谈之三Python与C/C++相互调用

    一.问题 Python模块和C/C++的动态库间相互调用在实际的应用中会有所涉及,在此作一总结. 二.Python调用C/C++ 1.Python调用C动态链接库 Python调用C库比较简单,不经过 ...

  9. day10 浅谈面向对象编程

    面向对象编程:第一步找名词,名词是问题域中的. 第二步概括名词设计成类.某些名词可以浓缩包含到其它名词中,成为其属性. 第三步找动词,动词也是问题域中的.   第四步概括动词设计成方法.动作的产生往往 ...

随机推荐

  1. Java实现 LeetCode 530 二叉搜索树的最小绝对差(遍历树)

    530. 二叉搜索树的最小绝对差 给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值. 示例: 输入: 1 \ 3 / 2 输出: 1 解释: 最小绝对差为 1,其中 2 ...

  2. Java实现 蓝桥杯VIP 算法提高 计算器

    算法提高 计算器 时间限制:1.0s 内存限制:256.0MB [问题描述] 王小二的计算器上面的LED显示屏坏掉了,于是他找到了在计算器维修与应用系学习的你来为他修计算器. 屏幕上可以显示0~9的数 ...

  3. Java实现 LeetCode 76 最小覆盖子串

    76. 最小覆盖子串 给你一个字符串 S.一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串. 示例: 输入: S = "ADOBECODEBANC", T = ...

  4. Java实现 LeetCode 42 接雨水

    42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水. 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这 ...

  5. Java实现 LeetCode 23 合并K个排序链表

    23. 合并K个排序链表 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [ 1->4->5, 1->3->4, 2->6 ] 输 ...

  6. PAT 福尔摩斯的约会

    大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm.大侦探很快就明白了,字条上奇 ...

  7. .Net Core WebAPI + Axios +Vue 实现下载与下载进度条

    故事的开始 老板说:系统很慢,下载半个小时无法下载,是否考虑先压缩再给用户下载? 本来是已经压缩过了,不过第一反应应该是用户下的数量多,导致压缩包很大,然后自己测试发现,只是等待的时间比较久而已,仍然 ...

  8. 大话计算机网络一 聊聊UDP

    引言 UDP是一个简单的面向数据报的运输层协议 UDP不提供可靠性,它把应用程序传给IP层得数据发送出去,不保证它们能达到目的地 UDP首部 端口号表示发送进程和接受进程. UDP长度字段指的是UDP ...

  9. opencv 移植

    1.ubunut系统搭建opencv+python开发环境 1.1.ubuntu系统安装pip3工具 sudo apt-get install python3-pip //安装python模块安装工具 ...

  10. tp5的 LayUI分页样式实现

    1.先配置你的分页参数: //分页配置 'paginate'      => [ 'type'      => 'Layui', 'var_page'  => 'page', 'li ...