Python面向对象

面向对象编程是一种程序设计思想,它把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。

面向过程与面向对象区别:

面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。

而面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。

Python是一门面向对象的语言,这篇文章芒果将带大家一起来学习Python面向对象。

我们首先要对这以下几个概念进行理解:

类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。

方法:类中定义的函数。

类变量:类变量在整个实例化的对象中是公用的。

数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。

继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。

方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。

对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

实例化:创建一个类的实例,类的具体对象。

实例变量:定义在方法中的变量,只作用于当前实例的类。

创建类和使用类

首先来看看Python怎么创建类,我们首先来创建一个简单的类Girl,对于大多数女孩子,都有名字跟年龄的属性,然后她们也能唱歌,爱漂亮。因此我们可以这样创建一个Girl类:

1class Girl():
2    """创建Girl类"""
3    #初始化函数,初始化Girl类的姓名、年龄
4    def __init__(self, name, age):
5        self.name = name
6        self.age = age
7
8    #模拟女孩喜欢唱歌
9    def sing(self):
10        print(self.name.title() + " loves singing!")
11
12    #模拟女孩爱漂亮
13    def beauty(self):
14        print(self.name.title() + " wants to be beautiful!")
15
16#实例化Girl类
17my_girl = Girl("lily",18)
18
19#调用方法
20my_girl.sing()
21my_girl.beauty()
22
23#显示结果
24Lily loves singing!
25Lily wants to be beautiful!

这里要注意一下,__init__是一个特殊的方法,每次我们为类创建新的实例时,都会调用此方法,在这个方法中,开头和结尾都是两个下划线;在类方法的每一个类变量和方法的第一个参数都有self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。在Python2.7中,我们在创建类时,需要在括号里加上object,即class Girl(object)。

在Python中,可以为实例添加变量和方法,而不影响到类或者其他实例:

1from types import MethodType
2#定义设置身高函数
3def set_height(self,height):
4    self.height = height
5
6#为my_girl实例添加height变量
7my_girl.height = 165
8print("The girl is " + str(my_girl.height) + " in height")
9
10#为my_girl实例添加set_height方法
11my_girl.set_height = MethodType(set_height,my_girl)
12my_girl.set_height(170)
13print("The girl is " + str(my_girl.height) + " in height")
14
15#显示结果
16The girl is 165 in height
17The girl is 170 in height

修改属性的值

1、直接修改

1class Girl():
2    """创建Girl类"""
3    #初始化函数,初始化Girl类的姓名、年龄
4    def __init__(self, name, age):
5        self.name = name
6        self.age = age
7
8    #模拟女孩喜欢唱歌
9    def sing(self):
10        print(self.name.title() + " loves singing!")
11
12    #模拟女孩爱漂亮
13    def beauty(self):
14        print(self.name.title() + " wants to be beautiful!")
15
16#实例化Girl类
17my_girl = Girl("lily",18)
18
19#修改属性值
20print("Before change girl's age is:" + str(my_girl.age))
21my_girl.age = 20
22print("After change girl's age is:" + str(my_girl.age))
23
24#显示结果
25Before change girl's age is:18
26After change girl's age is:20

2、如果使得属性值不能在类外部被直接修改,那么可以通过方法改变

1class Girl():
2    """创建Girl类"""
3    #初始化函数,初始化Girl类的姓名、年龄
4    def __init__(self, name, age):
5        self.__name = name
6        self.__age = age
7
8    #模拟女孩喜欢唱歌
9    def sing(self):
10        print(self.__name.title() + " loves singing!")
11
12    #模拟女孩爱漂亮
13    def beauty(self):
14        print(self.__name.title() + " wants to be beautiful!")
15
16    #设置女孩年龄
17    def set_age(self, age):
18        self.__age = age
19
20    #获取女孩年龄
21    def get_age(self):
22        return self.__age
23
24#实例化Girl类
25my_girl = Girl("lily",18)
26
27#修改属性值
28print("Before change girl's age is:" + str(my_girl.get_age()))
29my_girl.set_age(20)
30print("After change girl's age is:" + str(my_girl.get_age()))
31
32#显示结果
33Before change girl's age is:18
34After change girl's age is:20

这里要注意一下的是,当类变量在变量名前加上两个下划线,即表示它变成了一个私有变量,不能被外部访问。我们可以通过get和set函数来获取和修改它的值。

类的继承

编写类时,并非总是从空白开始。如果我们要写的类时另外一个类的特殊版本,可以使用继承。当一个类继承另外一个类时,将自动获得另外一个类的所有属性和方法;原有的类被称为父类,新类被称为子类。子类继承其父类所有的方法和属性,还同时可以定义自己的属性和方法。

我们在之前Girl类的基础上定义一个BeautyGirl的子类,并且给它定义它所拥有的独特的属性跟方法。

1class Girl():
2    """创建Girl类"""
3    #初始化函数,初始化Girl类的姓名、年龄
4    def __init__(self, name, age):
5        self.__name = name
6        self.__age = age
7
8    #模拟女孩喜欢唱歌
9    def sing(self):
10        print(self.__name.title() + " loves singing!")
11
12    #模拟女孩爱漂亮
13    def beauty(self):
14        print(self.__name.title() + " wants to be beautiful!")
15
16    #设置女孩年龄
17    def set_age(self, age):
18        self.__age = age
19
20    #获取女孩年龄
21    def get_age(self):
22        return self.__age
23
24class BeautyGirl(Girl):
25    def __init__(self, name, age, city):
26        super().__init__(name,age)
27        self.city = city
28
29    def describe_bg(self):
30        print("The beauty girl has beautiful eyes!")
31
32#实例化Girl类
33my_bgirl = BeautyGirl("Ailie",16,"changsha")
34
35#调用方法,子类拥有父类方法
36my_bgirl.sing()
37my_bgirl.beauty()
38
39#调用方法,子类拥有其特殊属性和方法
40print("The beauty girl living in " + my_bgirl.city)
41my_bgirl.describe_bg()
42
43#显示结果
44Ailie loves singing!
45Ailie wants to be beautiful!
46The beauty girl living in changsha
47The beauty girl has beautiful eyes!

在这里我们需要注意一下,在子类初始化时,我们可以调用父类的初始化函数,我们使用super()方法将子类和父类联系起来。在Python2.7中略有不同,我们使用的是super(BeautyGirl,self)方法。

重写父类的方法

1class BeautyGirl(Girl):
2    def __init__(self, name, age, city):
3        super().__init__(name,age)
4        self.city = city
5
6    def describe_bg(self):
7        print("The beauty girl has beautiful eyes!")
8
9    #重写Girl父类的beauty方法
10    def beauty(self):
11        print("The girl is beautiful!")
12
13#实例化Girl类
14my_bgirl = BeautyGirl("Ailie",16,"changsha")
15
16#调用方法,子类拥有父类方法
17my_bgirl.beauty()
18
19#显示结果
20The girl is beautiful!

我们可以看到子类的实例在调用beauty方法时,忽略掉了父类Girl里的方法,直接使用了上面子类定义的beauty方法。所以,使用继承时,我们可以让子类保留从父类那里继承而来的需要的方法,而重写不合适的方法。

在Python的面向对象同样具有多态性,也可以进行多重继承,关于这些内容芒果以后再给大家介绍啦~大家学得怎么样呢?有疑问或者想要学习更多Python相关知识的话可以加芒果微信,一起讨论学习哟~

点击原文可以到达我们Python自动化课程学习的目录哟

TestOps|测试运维

精益技术 赋能过程

(0)

相关推荐

  • python3中的call函数

    call()的本质是将一个类变成一个函数(使这个类的实例可以像函数一样调用). class A(object): def __init__(self, name, age): self.name = ...

  • Python面向对象有什么特性?三大点!

    我们都知道,Python是一门面向对象的编程语言,它具有三大特性,那么你知道Python面向对象三大特性是什么?接下来我们通过这篇文章来详细了解一下. 第一点:封装 隐藏对象的属性和实现细节,仅对外提 ...

  • 可能是最全的Python面向对象入门教程了

    Python那些事 1周前 作者:浪子燕青       链接: http://www.langzi.fun/Python面向对象编程.html 面向对象编程和函数式编程(面向过程编程)都是程序设计的方 ...

  • Python 面向对象编程(一)

    虽然Python是解释性语言,但是它是面向对象的,能够进行对象编程.下面就来了解一下如何在Python中进行对象编程. 一.如何定义一个类 在进行python面向对象编程之前,先来了解几个术语:类,类 ...

  • Python面向对象编程(二)

    在前面一篇文章中谈到了类的基本定义和使用方法,这只体现了面向对象编程的三大特点之一:封装.下面就来了解一下另外两大特征:继承和多态. 在Python中,如果需要的话,可以让一个类去继承一个类,被继承的 ...

  • Python 面向对象 —— 类和实例

    https://www.cnblogs.com/feeland/p/4409130.html Python 面向对象 -- 类和实例 类 虽然 Python 是解释性语言,但是它是面向对象的,能够进行 ...

  • Python 面向对象编程的核心概念知识点简介

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于 无量测试之道 ,作者: 无量测试之道 面向对象编程的核心概念:封装,抽象,多态.继 ...

  • Python 面向对象 | 菜鸟教程

    Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触过 ...

  • python面向对象-1

    python面向对象-1

  • 【Python面试】 说说Python面向对象三大特性?

    公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...