面向对象简要介绍
说到类,就不得不说面向对象。
那什么是面向对象呢?就是你有个对象,面对着你的对象编写程序,哈哈~~
开个玩笑
在函数之前的学习都是面向过程,这一步做什么,下一步做什么,一直到执行结束~~
举个简单的例子
你想喝鱼汤,按照面向过程的方式就是:
- 买鱼
- 杀鱼
- 放锅里油煎一下
- 放调料
- 放水
- 烧开
- 喝鱼汤
面向对象:
- 找个饭店
- 付钱
- 喝鱼汤
总结
- 面向过程:根据业务逻辑从上到下写代码
- 面向对象:将数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程
不管是面向过程还是面向对象,其实都是解决问题的一种思路。
面向对象编程有2个非常重要的概念:类和对象
对象是面向对象编程的核心,在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提出了另外一个新的概念——类
类
类都是抽象,在使用的时候通常会找到这个类的一个具体的存在,使用这个具体的存在
邓爷爷有句话说,不管黑猫白猫逮到老鼠就是好猫
那么,当别人问你,什么是猫的时候你怎么说?
我肯定会说猫有:
- 四肢
- 尾巴
- 两只耳朵
- 叫声:喵喵~~
这些是猫都会有的特征,是最基本的属性
那么,我们将具有共同特征和行为的一组对象抽象定义,提出了另外一个新的概念————类
而邓爷爷说的黑猫白猫就是对象
类的构成
类(class)由三部分构成:
- 类的名称:类名【遵循大驼峰命名方法】
- 类的属性:一组数据
- 类方法:允许对进行操作的方法(行为) 举例
- 类的名称:猫
- 属性:颜色、大小、品种
- 方法(行为/功能):会跑,会抓老鼠
定义一个类
class 类名:
方法
定义一个猫类:
class Cat(object):
def base_info(self):
print("四肢")
print("尾巴")
print("两只耳朵")
print("叫声:喵喵~~")
def catchMouse(self):
print("会抓老鼠")
创建对象
上面,已经知道了怎么去定义一个类,怎么去定义一个对象?
创建对象的格式:
- 对象名=类名()
示例代码:
black_cat = Cat()
black_cat.color = '黑色' # 添加猫的颜色
black_cat.run = 10 # 给对象添加属性,不会跑怎么抓老鼠
black_cat.catchMouse() # 调用对象方法,去抓老鼠
总结:当创建一个对象的时候,好比用一个模型,来生产一个具体的事物
self
- 所谓的self,可以理解为自己
- 某个对象调用其方法时,python解释器会把这个对象作为第一个参数传递给self,所以开发者只需要传递后面的参数即可
初始化方法
class 类名():
# 初始化函数,用来完成一些默认的设定
def __init__(): # init两边各两个英文状态下的下划线
pass
定义猫类:
# 定义猫类
class Cat(object):
def __init__(self):
self.leg = 4
self.tail = 1
self.ear = 2
self.voice = "喵喵"
def catchMouse(self):
print("会抓老鼠")
# 创建猫的对象
black_cat = Cat()
print("猫有{}腿".format(black_cat.leg))
print("猫有{}尾巴".format(black_cat.tail))
print("猫的叫声{}".format(black_cat.voice))
print("猫有{}耳朵".format(black_cat.ear))
运行结果:
- 猫有4腿
- 猫有1尾巴
- 猫的叫声喵喵
- 猫有2耳朵
总结
当创建Cat对象后,在没有调用__init__()方法的前提下,black_cat就默认拥有了4个属性leg、tail、ear、voice,原因是__init__()方法是在创建对象后,就立刻被默认调用了
想一下
既然在创建完对象后__init__()方法已经被默认的执行了,那么能否让对象在调用__init__()方法的时候传递一些参数呢?如果可以,那怎样传递呢?
class Cat():
def __init__(self,newVoice,newEar):
self.ear = newEar
self.voice = newVoice
def catchMouse(self):
print("抓老鼠")
# 创建对象
black_cat = Cat(2,'喵喵')
# 查看猫的属性
print(black_cat.voice)
print(black_cat.ear)
# 返回结果
2
喵喵
- 总结
- __init__()方法,在创建一个对象时默认被调用,不需要手动调用
- __init__(self)中,默认有1个参数名字为self,如果在创建对象时传递了2个实参,那么__init__(self)中除了self作为第一个形参外还需要2个形参,例如__init__(self,x,y)
- __init__(self)中的self参数,不需要开发者传递,python解释器会自动把当前的对象引用传递进去
- 在python中方法名如果是__xxxx__()的,那么就有特殊的功能,因此叫做“魔法”方法