编程的两个思想: 面向对象和面向过程
面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西。

优点是:极大的降低了写程序的复杂度,只需要顺着要执行的步骤,堆叠代码即可。

缺点是:一套流水线或者流程就是用来解决一个问题,代码牵一发而动全身。

应用场景:一旦完成基本很少改变的场景,著名的例子有Linux內核,git,以及Apache HTTP Server等。

面向对象的程序设计的核心是对象(上帝式思维),要理解对象为何物,必须把自己当成上帝,上帝眼里世间存在的万物皆为对象,不存在的也可以创造出来

面向对象的优缺点:
优点是:解决了程序的扩展性。对某一个对象单独修改,会立刻反映到整个体系中,如对游戏中一个人物参数的特征和技能修改都很容易。

缺点:可控性差,无法向面向过程的程序设计流水线式的可以很精准的预测问题的处理流程与结果,面向对象的程序一旦开始就由对象之间的交互解决问题,即便是上帝也无法预测最终结果。

应用场景:需求经常变化的软件,一般需求的变化都集中在用户层,互联网应用,企业内部软件,游戏等都是面向对象的程序设计大显身手的好地方

两者相辅相成,并不是对立的,都是为了解决问题的。

1. 类和对象

类是多个类似的事物组成的群体的统称。 能够帮助我们快速理解和判断事物的性质。

类:具有相同特征的一类事物(人、狗、老虎,手机)

对象/实例:具体的某一个事物(你的同学张三、楼下的旺财)

实例化:类——>对象的过程

比如一说手机你就想到他的形状,里面有收发短信,打电话的功能,也能上网。 但你能知道我说的手机在上哪个网站吗?
不能,所以手机就是一个类,它具有相同的属性和方法; 而具体的用手机做了什么,谁的手机,就是手机类的一个对象。
比如小米手机

Python中一切皆为对象,列表对象,数字对象

用变量表示特征,用函数表示技能,具有相同特征和技能的一类事物就是‘类’,对象是则是这一类事物中具体的一个。

2. 类的创建和编写

a) 定义一个类

语法:
class Student:
pass

类的组成:

  • 类名的规范: 是由一个或者多个单词组成的,要求每个单词的首字母大写,其余的小写;
  • Python中一切皆对象,需要开辟内存空间
# 作者:互联网老辛
# 开发时间:2021/4/4/0004 6sclass Student:passprint(id(Student))
print(type(Student))
print(Student)


看到ID的数值,就知道这里的类是开辟了一块内存空间。

案例1:学生类模板

# 作者:互联网老辛
# 开发时间:2021/4/4/0004 6sclass Student:native_pace='山东' # 直接写在类里的变量,成为属性 ,学生的地方属性是山东#实例方法: 在类之外定义称为函数,在类之内定义成为方法def __init__(self,name,age):self.name=nameself.age=age  #self.name称为实体属性,进行了一个复制操作,将局部变量name赋值给实体的属性def eat(self):print('正在吃饭') # 这是一个方法,叫吃饭方法,也叫动态属性#静态方法@staticmethoddef method():print('我使用了statticmethod进行修饰,所以我叫静态方法')@classmethod#这种叫类方法def cm(cls):print('我是类方法,因为我使用了classmethod进行修饰')

通过这个案例来了解,静态方法,实例方法,以及类方法和动态属性

b) 创建对象

对象的创建又称为类的实例化

语法: 实例名=类名()
类名+括号就是实例化,会自动触发 _ init _函数运行,可以用它来为每个实例定制自己的特征。

# 作者:互联网老辛
# 开发时间:2021/4/4/0004 6sclass Student:native_pace='山东' # 直接写在类里的变量,成为属性#实例方法: 在类之外定义称为函数,在类之内定义成为方法def __init__(self,name,age):self.name=nameself.age=age  #self.name称为实体属性,进行了一个复制操作,将局部变量name赋值给实体的属性def eat(self):print('正在吃饭')#静态方法@staticmethoddef method():print('我使用了statticmethod进行修饰,所以我叫静态方法')@classmethod#这种叫类方法def cm(cls):print('我是类方法,因为我使用了classmethod进行修饰')
## 创建Student的对象
stu1=Student('互联网老辛',40)
stu1.eat()
print(stu1.name)
print(stu1.age)


实例化的过程就是: 类——>对象的过程。

我们原本只有一个Student类,产生了一个stu1对象,这个对象有自己的具体命令,年龄,以及吃饭的方法。

案例2

# 作者:互联网老辛
# 开发时间:2021/4/4/0004 6sclass Person:role='person' #角色的属性是人def __init__(self,name):self.name = name #每个角色有一个自己的名字def walk(self):print("person can walking")##实例化过程
p1=Person('张三')  #类名()就相当于执行 Person.__init__()
#这里你可以理解为 p1={'name':'张三',’walk':'walk'}print(p1.name) #查看属性直接 对象名,属性名
print(p1.walk()) # 调用方法, 对象名.方法名

大部分的注释都写在代码里了,可以看代码去理解

再给刚才的代码增加功能,比如人不但可以走路还可以攻击狗


class Person:role='person' #角色的属性是人def __init__(self,name,aggressivity,life_value):self.name = name #每个角色有一个自己的名字self.aggressivity = aggressivity # 每个角色都有一个攻击力self.life_value = life_value #每个角色都有一个生命值def walk(self):print("person can walking")def attack(self,dog):dog.life_value -= self.aggressivity##实例化过程
p1=Person('张三',10,1000)  #类名()就相当于执行 Person.__init__()
#这里你可以理解为 p1={'name':'张三',’walk':'walk'}print(p1.name) #查看属性直接 对象名,属性名
print(p1.walk()) # 调用方法, 对象名.方法名
print(p1.aggressivity)
print(p1.life_value)

c) 类属性,类方法,静态方法

  • 类属性: 类中方法外的变量称为类属性,该类被所有对象共享
  • 类方法: 使用@classmethod修饰方法,使用类名直接访问
  • 静态方法 使用@staticmethod修饰的方法,使用类名直接访问的方法

Print(Student.native_place) 访问类属性
student.cm 调用类方法
student.sm 调用静态方法

用Python实现植物大战僵尸里的面向对象

class Flora:role='flora' # 定义一个植物类,属性是植物def __init__(self,name,aggressivity,life_value,money):self.name=nameself.aggressivity=aggressivity ## 每个角色都有自己的攻击力self.life_value=life_value #每个角色都有自己生命值self.moeny=moneydef attack(self,corpse):# 植物都可以攻击僵尸,僵尸的生命值会根据人的攻击而下降corpse.life_value -= self.aggressivityclass Corpse:rols='corpse'  #僵尸类,属性都是僵尸def __init__(self,name,aggressivity,life_value):self.name = nameself.aggressivity = aggressivity  ## 每个角色都有自己的攻击力self.life_value = life_value  # 每个角色都有自己生命值def eat(self,flora):flora.life_value-=self.aggressivity#僵尸可以吃植物,植物的生命力会下降class Weapon: ## 武器库def __init__(self,name,price,aggrev,life_value):self.name=nameself.price=priceself.aggrev=aggrevself.life_value=life_valuedef update(self,obj):obj.money -= self.price  # 购买武器的植物钱少钱少obj.aggressivity += self.aggrev  #攻击力增加obj.life_value += self.life_value  #生命值增加def prick(self,obj):obj.life_value -= 500 # 武器的大招,一次掉血500ps=Weapon('豌豆炮',200,6,100) ##有一个武器可供选择,武器名字叫豌豆炮
cabbage=Flora('bigcabbage',10,1000,6000) #创建了大白菜植物
zombie=Corpse('z1','zob1',10) #创建了一个僵尸,普通僵尸
##植物感觉打不死僵尸,于是升级自己的武器为豌豆炮print(cabbage.moeny,cabbage.life_value,cabbage.aggressivity)
print(zombie.life_value)

【Python从零到壹】用Python实现植物大战僵尸里的面向对象相关推荐

  1. 【Python从零到壹】Python的循环结构详解

    欢迎大家来到互联网老辛的专栏<Python从零到壹>,在这里我将分享约300篇Python系列文章,所有文章都将结合案例.代码和作者的经验讲解,真心想把自己近十年的编程经验分享给大家,希望 ...

  2. 【Python从零到壹】Python条件语句详解

    欢迎大家来到互联网老辛的专栏<Python从零到壹>,在这里我将分享约300篇Python系列文章,所有文章都将结合案例.代码和作者的经验讲解,真心想把自己近十年的编程经验分享给大家,希望 ...

  3. 【Python从零到壹】Python文件的操作详解

    文章目录 1. 文件的读写原理: 2. 常用的文件打开模式 3. 文件对象的常用方法 4. 目录的相关操作 1. 文件的读写原理: 文件的读写称为I/O操作. 操作原理: .py文件是用解释器去运行, ...

  4. 【Python从零到壹】Python爬虫部分开篇

    在学习Python爬虫部分,需要你已经学过Python基础和前端的相关知识. 文章目录 开发环境介绍: 数据的来源及作用 数据的作用 爬虫的相关概念 a) 爬虫的概念 b) 爬虫分类 c) 爬虫的原理 ...

  5. 【Python从零到壹】python爬虫系列-网络请求

    学习了之前的基础和爬虫基础之后,我们要开始学习网络请求了. 文章目录 urllib的介绍 urllib库的四大模块: 案例 发送请求 代码案例 发送请求-Request请求 IP代理 使用cookie ...

  6. 【Python从零到壹】Python模块介绍与使用

    文章目录 模块的相关概念 1. 什么是模块 2. 使用模块的好处 模块的使用 1. 自定义模块 a) 方法一: 导入模块: b) 方法二 c) 导入自己的模块 Python中的包 1. 包的介绍 2. ...

  7. 【Python从零到壹】Python的字符串详解

    之前我们学习过一个不可变的序列叫元组,今天我们探讨的字符串,也是一个不可变序列. 文章目录 1. 字符串的创建 1) 字符串的定义 2. 字符串的常用操作 1) 查询操作 2) 字符串的常用操作 a) ...

  8. 【Python从零到壹】Python的元组和集合

    文章目录 1. 元组的概念 1) 什么是元组 2) 元组的创建方式 作者:互联网老辛 开发时间:2021/4/4/0004 6:54 2. 元组的遍历 3.集合的概念 1) 什么是集合 2) 集合的创 ...

  9. 【Python从零到壹】Python的字典详解

    文章目录 1. 字典的概述 1)什么是字典. 2)字典的创建 3)字典元素的获取 2.3字典的增删改查 a) key的判断 b) 字典元素的删除 c) 字典元素的新增 d) 获取字典视图的方法 3. ...

最新文章

  1. ASP.NET 网站预编译概述
  2. linux:配置jdk环境变量
  3. IBM 火雪挺:人工智能如何影响衣食住行?
  4. vue脚手架 全局变量可以是变量吗_Vue.js2 全局变量的设置方法
  5. 今天 ,给大家变个魔术!!!
  6. 批改网禁止粘贴怎么破_重大利好!教育部声明,要求家长批改作业等行为,发现一起严处一起...
  7. [0].Net开发者社区--您好大的官威啊!
  8. HTML中光移动边框,CSS 边框各边
  9. java学习 类变量 类方法_这篇文章主要介绍了JAVA类变量及类方法代码实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下类变量(...
  10. Bailian4120 硬币【0-1背包】
  11. Qt学习之路_6(Qt局域网聊天软件)
  12. 【语音去噪】基于matlab最小二乘法(LMS)自适应滤波器【含Matlab源码 481期】
  13. java 使用itextpdf分割pdf文件,pdf分页
  14. Android精仿淘宝/QQ空间标题栏渐变效果
  15. 联邦学习拜占庭鲁棒差分隐私博弈论
  16. 埃森哲 X SAP:智慧转型高手论剑
  17. ESModule 系列 (二):构建下一代基础设施 PDN
  18. 一个一站式流式处理云平台解决方案
  19. 【小程序】tabbar用法
  20. Opencv各基本函数的作用及示例1(对图像的基础处理)

热门文章

  1. 西门子PLC smart200伺服液压PID昆仑通态人机界面一套完整项目程序
  2. 极简而高效的沟通管理法
  3. matlab bwlable代码,matlab的bwlabel
  4. linux配置apache文件大小,linux下限制Apache日志access.log以及error.log文件大小
  5. 视频字幕制作:Subtitle Studio for Mac
  6. 三星s3 android版本,哭死!Galaxy S3竟然如此悲催
  7. Ijk播放器无法播放带空格或者中文的网络视频的解决方法
  8. 利用shell脚本定时执行程序
  9. MySQL 学习笔记②
  10. 小波变换 边缘检测 matlab,边缘检测算子和小波变换提取图像边缘【matlab】