不会面向对象,肯定学不好!简易的Python面向对象攻略来啦1. 第一个类面向对象的概念面向过程的代码可能是这样的面向对象的代码2.构造方法和属性最简单的类创建实例构造方法 initself和属性默认

原标题:不会面向对象 , 肯定学不好!简易的Python面向对象攻略来啦
来源:麦叔编程
作者:麦叔
1.第一个类面向对象的概念设想一下 , 你如何开发下面这个游戏:

不会面向对象,肯定学不好!简易的Python面向对象攻略来啦1. 第一个类面向对象的概念面向过程的代码可能是这样的面向对象的代码2.构造方法和属性最简单的类创建实例构造方法 initself和属性默认
文章图片
很难想象 , 用简单的字符串 , int,list等数据类型就能表达和开发出这么复杂的游戏(实际上是可以的 , 只是很麻烦) 。
更好的做法是使用面向对象的技术 。 这个游戏无非就是一个个对象互相打打杀杀!
编程是对现实世界的模拟 , 我们先来看看面向对象的几个核心概念:
类-模板 , 如人类实例-用模板造出的对象 , 如貂蝉属性-是特征 , 如姓名方法-是行为 , 是技能 , 如攻击在早期的编程语言中 , 比如C语言中 , 是没有面向对象的概念的 , 所有的程序 , 不管多么复杂 , 都是用数字 , 字符串等来表达的 。 那时候我们称为面向过程编程 。
面向过程编程:ProcedureOrientedProgramming是一种以过程和任务为中心的编程思想 。 通过一系列具体的步骤操作相关的数据 , 实现软件功能 。
面向对象编程
ObjectOrientedProgramming是一种以对象为基础的编程思想 。 把数据和操作封装到对象中 , 通过对象一系列的交互 , 实现软件功能 。
下面我用一个小的例子带你理解面向对象 。
假设有两条狗 , 他们分别有自己的名字 , 身高 , 血量和攻击力 。 我们要模拟一条狗攻击了另外一条狗 。
面向过程的代码可能是这样的#表示狗的属性
dog1_name='大黄'
dog1_/>dog1_blood=1.0
dog1_power=0.1
dog2_name='二黑'
dog2_height=0.7
dog2_blood=1.0
dog2_power=0.2
#dog1攻击dog2
print('dog1attackingdog2')
dog2_blood=dog2_blood-dog1_power
#dog2攻击dog1
print('dog2attackingdog1')
dog1_blood=dog1_blood-dog2_power
这显然不好 , 如果有100条狗互相乱咬呢?
我们来看看面向对象的写法:
面向对象的代码#类是一个模板
classDog:
#构造方法
def__init__(self,name,height,blood,power):
self.name=name
self.height=height
self.blood=blood
self.power=power
defattack(self,dog2):
dog2.blood=dog2.blood-self.power
d1=Dog('大黄',0.7,10,3)#创建第1个实例
d2=Dog('二黑',0.5,10,4)#创建第2个实例
print(f'攻击前:{d2.blood}')
d1.attack(d2)
print(f'攻击后:{d2.blood}')
首先创建了一个Dog类 , 它包含了4个属性 , 和一个方法 。 接下来 , 我们就像女娲造人一样 , 用Dog类作为模板 , 构建出两个狗d1和d2 。 然后d1攻击了d2 。这虽然看起来代码比上面还长 , 但是代码很自然 , 更容易懂 , 更有“人性” 。
如果我们要创建100个Dog , 也很容易 。 把这100个Dog放到一个列表中也很方便 。
下面我们来庖丁解牛 , 从零开始学习面向对象的核心概念 。
2.构造方法和属性我们再回到前面的例子 , 从零开始 , 理解类的核心概念 。
最简单的类#最简单的类
classDog:
pass
这是一个最简单的类 , 它里面什么都没有 , 就像一个空白的信封 。 注意类的定义以class开头 , 后面是类的名字 , 类名一般用大写 。
创建实例虽然它什么都没有 , 但我们仍然可以用它来创建实例 。
【不会面向对象,肯定学不好!简易的Python面向对象攻略来啦1. 第一个类面向对象的概念面向过程的代码可能是这样的面向对象的代码2.构造方法和属性最简单的类创建实例构造方法 initself和属性默认】d1=Dog()
d2=Dog()
print(id(d1))
print(id(d2))
创建实例通过使用类名加括号 , 有的类需要传入参数 。 通过下面的打印可以看出d1和d2的内存地址不同 , 他们确实是不同的实例 , 在内存里有自己独立的房间 。
Python是一个动态语言 , 我们可以给类动态的添加属性:
d1.name='旺财'
print(d1.name)
print(d2.name)#报错 , 因为d2没有name属性
正常情况下类不是空的 , 我们要求创建实例的时候就必须填写必要的信息 , 这样才是一个有效的实例 。
构造方法init我们创建实例的过程 , 会调用了一个叫做__init__的方法 。 前面的Dog中没有init方法 , 它就给我们创建了一个空的对象出来 。 实际上Python调用了Object类的init方法 , 这个方法不需要传任何参数 , 也不做任何事情 。
现在我们给Dog类加上__init__方法:
#类是一个模板
classDog:
#构造方法
def__init__(self,name,height,blood,power):
self.name=name
self.height=height
self.blood=blood
self.power=power