初识面向对象 | 手把手教你入门Python之五十一

简介: 面向对象是将变量与函数绑定到一起,分类进行封装,每个程序只要负责分配给自己的分类,这样能够更快速的开发程序,减少了重复代码。

上一篇:包的使用 | 手把手教你入门Python之五十
下一篇:self的使用 | 手把手教你入门Python之五十二

本文来自于千锋教育在阿里云开发者社区学习中心上线课程《Python入门2020最新大课》,主讲人姜伟。

面向对象的

面向对象与面向过程

  • 面向过程:根据业务逻辑从上到下写代码。
  • 面向对象:将变量与函数绑定到一起,分类进行封装,每个程序只要负责分配给自己的分类,这样能够更快速的开发程序,减少了重复代码。

面向过程编程易被初学者接受,其往往用一长段代码来实现指定功能,开发过程的思路是将数据与函数按照执行的逻辑顺序组织在一起,数据与函数分开考虑,面向过程基本是由函数组成的。

面向过程编程

面向过程编程的关注点在于怎么做

  • 把完成某一个需求的 所有步骤 从头到尾 逐步实现
  • 根据开发需求,将某些 功能独立 的代码 封装 成一个又一个 函数
  • 最后完成的代码,就是顺序地调用 不同的函数

特点:

  • 注重步骤与过程,不注重职责分工
  • 如果需求复杂,代码会变得很复杂
  • 开发复杂项目,没有固定的套路,开发难度很大!

image.png

面向对象基本概念

面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)和面向过程编程,是两种不同的编程方式。

面向对象编程的关注点在于谁来做

相比较函数,面向对象是更大的封装,根据职责在 一个对象中封装多个方法

  • 在完成某一个需求前,⾸首先确定职责 — 要做的事情(方法)
  • 根据 职责 确定不同的 对象,在对象内部封装不同的方法(多个)
  • 最后完成的代码,就是顺序地调用不同对象的相应⽅方法。

特点:

  • 注重 对象和职责,不同的对象承担不同的职责。
  • 更加适合应对复杂的需求变化,是专门应对复杂项目开发,提供的固定套路。
  • 需要在面向过程基础上,再学习一些面向对象的语法。

类和对象

对象是面向对象编程的两个核心概念。

类是对一群具有相同特征或者行为 的事物的一个统称,是抽象的。

  • 特征其实就是一个变量,在类里我们称之为属性。
  • 行为其实就是一个函数,在类里我们称之为方法。
  • 类其实就是由 属性方法 组成的一个抽象概念。

类就相当于制造飞机时的图纸,是一个模板。这个模板只规定了飞机的某些特征(例如大小,颜色,型号等
等)和行为(例如起飞,降落,飞行等等),它并不是一个具体的飞机,而是对飞机的一个抽象概念。它出现的目的,是为了让我们的创建飞机对象。
image.png

对象

对象是由类创建出来的一个具体存在,可以直接使用。由哪一个类创建出来的 对象,就拥有在哪一个类中定义的属性和⽅方法。 对象 就相当于用图纸制造的飞机。在开发中,应该先有类,在类里定义好属性和行为,再根据类来创建对象。
image.png

类和对象的关系

  • 类是模板,对象是根据类这个模板创建出来的,应该先有类,再有对象。
  • 使用同一个类,能够创建出很多对象。
  • 类中定义了什么属性和方法,对象中就有什么属性和方法。
  • 不同对象对应的属性值也会不同。

例如:定义了一个狗类,这个狗类有以下属性:

  • 品种
  • 颜色
  • 性别
  • 名字

现在根据这个类创建出了两条狗,这两条狗分别是 哈士奇、灰色、母、二哈 和中华田园犬、黄色、公、旺财。我们发现,这两条狗都具有 品种、颜色、性别和名字这些属性,但是每条狗对应的属性值却不一样。

类的设计

在使用面向对象开发前,应该首先分析需求,确定一下,程序中需要包含哪些类!
image.png

image.png
在程序开发中,要设计一个类,通常需要满足一下三个要素:

  1. 类名 这类事物的名字,按照大驼峰命名法(每个单词的首字母大写)起名。
  2. 属性 这类事物具有什么样的特征。
  3. 方法 这类事物具有什么样的行为。

定义类名

名词提炼法:分析整个业务流程,出现的名词,通常就是找到的类。

属性和方法的确定

  • 对对象的特征描述,可以定义成属性
  • 对象具有的行为(动词)可以定义成方法

练习

需求1:

  • 小明今年18 岁,身高 1.75,每天早上跑完步,会去 吃东西
  • 小美今年17 岁,身高 1.65,小美不不跑步,小美喜欢 吃东西

需求2:

  • 一只黄颜色的狗狗叫大黄
  • 看见生人汪汪叫
  • 看见家人摇尾巴

针对于上面的练习,我们需要抽象理解成一个类。接着来介绍面向对象的基本语法。

面向对象基本语法

在Python中,对象几乎是无处不在的,我们可以使用dir 内置函数来查看这个对象里的方法。

定义简单的类(只包含方法)

面向对象是更大的封装,在一个类中封装多个方法,这样通过这个类创建出来的对象,就可以直接调用这些方法了!

定义类
在Python中要定义一个只包含方法的类,语法格式如下:

class 类名:
    def 方法1(self,参数列表):
        pass
    def 方法2(self,参数列表):
        pass

1、方法的定义格式和之前学习过的函数一样

2、方法里的第一个参数必须是self,大家暂时先记住,稍后介绍 self。
3、类名要遵守大驼峰命名法,每一个单词的首字母都要大写。类名定义的2种方法:
class <类名>:
class <类名>(object):

创建实例对象
当一个类定义完成之后,要使用这个类来创建对象,语法格式如下:

对象变量名 = 类名()

面向对象代码

以上面的练习需求1为例:

class Student(object):        #关注这个类有哪些特征和行为
    #在 __init__ 方法里,以参数的形式定义特征,我们称之为属性
    def __init__(self, name, age, height):           
        self.name = name
        self.age = age
        self.height = height

    #行为定义为一个个函数
    def run(self):
        print('正在跑步')

    def eat(self):
        print('正在吃东西')


# 使用 Student 类创建了两个实例对象 s1 s2
# s1和s2都有name,age,height属性,同时都有run和eat方法
s1 = Student('小明', 18, 1.75)  # Student()  ==> 会自动调用 __init__ 方法
s2 = Student('小美', 17, 1.65)

# 根据业务逻辑,让不同的对象执行不同的行为
s1.run()
s1.eat()

s2.eat()

执行结果:
image.png

需求

  • 小猫爱吃鱼,小猫要喝水

分析

  • 定义一个猫类 Cat
  • 定义两个方法 eat 和 drink
  • 按照需求 —— 不需要定义属性
class Cat:
    """这是个猫类"""

    def eat(self):
        print("小猫在吃东西")

    def drink(self):
        print("小猫在喝水")

tom = Cat() # 创建了一个Cat对象
tom.eat()
tom.drink()

hello_kitty = Cat() # 又创建了一个新的Cat对象
hello_kitty.eat()
hello_kitty.drink()

执行结果:
image.png

配套视频

相关文章
|
1天前
|
算法 物联网 数据库
Python 物联网入门指南(一)(4)
Python 物联网入门指南(一)
14 3
|
1天前
|
物联网 Linux 网络安全
Python 物联网入门指南(一)(3)
Python 物联网入门指南(一)
15 4
|
1天前
|
网络协议 物联网 Linux
Python 物联网入门指南(一)(2)
Python 物联网入门指南(一)
10 1
|
1天前
|
物联网 机器人 异构计算
Python 物联网入门指南(一)(1)
Python 物联网入门指南(一)
11 2
|
6天前
|
机器学习/深度学习 数据采集 数据可视化
利用Python进行历史数据预测:从入门到实践的两个案例分析
利用Python进行历史数据预测:从入门到实践的两个案例分析
20 1
|
9天前
|
Python
Python中的面向对象
【5月更文挑战第4天】面向对象编程(OOP)是Python的核心,涉及类与对象、封装、继承和多态。类是对象的模板,对象则是类的实例。例如,`Person`类有`__init__`构造方法和`greet`方法。
15 3
|
12天前
|
机器学习/深度学习 自然语言处理 语音技术
【Python 机器学习专栏】Python 深度学习入门:神经网络基础
【4月更文挑战第30天】本文介绍了Python在深度学习中应用于神经网络的基础知识,包括神经网络概念、基本结构、训练过程,以及Python中的深度学习库TensorFlow和PyTorch。通过示例展示了如何使用Python实现神经网络,并提及优化技巧如正则化和Dropout。最后,概述了神经网络在图像识别、语音识别和自然语言处理等领域的应用,并强调掌握这些知识对深度学习的重要性。随着技术进步,神经网络的应用将持续扩展,期待更多创新。
|
6月前
|
Python
一文学会Python面向对象中封装、继承、多态使用
一文学会Python面向对象中封装、继承、多态使用
82 0
|
6月前
|
Python
浅谈Python面向对象中的继承与mro
浅谈Python面向对象中的继承与mro
25 0