目前代码技能已经成了测试同学面试考核的刚需,对于测试开发来讲需求最大的是java和python两门语言,二者也都是面向对象语言。对于刚入门代码的同学来说面向对象相关的概念比较难于理解,而面向对象编程相关的知识点偏偏又是面试中的高频问题,所以本文我以python为例,带大家快速搞定面向对象中的核心概念并通过代码实现的方式来帮助大家对其加深理解!

面向对象基础

对象

对象有两个层次的概念,现实生活中对象指的是客观世界的实体;而程序中对象就是一组变量和相关方法的集合,其中变量表明对象的状态,方法表明对象所具有的行为。可以将现实生活中的对象经过抽象,映射为程序中的对象,对象是对现实的高度抽象。

对象在程序中是通过一种抽象数据类型来描述的,这种抽象数据类型即Class。类是描述对象的“基本原型”,它定义一类对象所能拥有的数据和能完成的操作。在面向对象的程序设计中,类是程序的基本单元。

类和对象的关系

对象是类的一个实例,创建一个对象就是类进行了实例化,从代码角度讲就是在内存中开辟了一块新的地址空间运行程序。一个类可以创建无数个实例(只要计算机的内存足够大),使用python代码实现如下:

dog =Animal()

即对象dog是类Animal的一个实例。

属性

存储对象的状态,可以理解为变量。

方法

实现对象的行为,可以理解为函数。

上面是面向对象理论的解释,我们以去动物园看动物为例,我们通常说去看动物,但是没有人能够看到动物这个抽象的东东,我们只能看到具体的某一种类的动物。这里的动物就是类的概念,而我们看的具体动物,例如:东北虎就是实例。关于动物的种类、颜色以及雌雄就是动物的属性,而动物具备的基础能力,例如:跑、吃、叫等等,我们则可以将其定义为方法。

面向对象三原则

面向对象三原则包括:封装、继承、多态。

封装

封装实际上是使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。我们在使用api时,如果提供方不给我们源码,我们是无法知道其内部实现的,但是这并不会妨碍我们对api的使用。简单规则如下:

xx: 公有变量或方法;

_xx:变量或方法前面加双前置下划线,无法在外部直接访问;

class Demo(object):

public_var="共有变量"

__private_var = "私有变量"

def public_func(self):

print("共有方法")

def __private_func(self):

print("私有方法")

d=Demo()

d.public_func()

d.__private_func()

当执行代码时会报错:

AttributeError: 'Demo' object has no attribute '__private_func'

错误信息提示,Demo中找不到方法__private_func,原因是该方法是私有方法,不能被Demo类以外的模块或者类调用!所以大家在设计类中的方法或者属性时需要考虑好是否需要被外部调用,如果需要则设计成xx形式,如果不需要则设计成__xx形式。对于刚入门编码的小白来说,把属性和方法都设计成共有即可。

继承

继承性是面向对象程序设计语言的另一基本特征,通过继承可以实现代码的复用。继承而得到的类为子类,被继承的类为父类,所有直接或间接被继承的类都是父类。继承是子类利用父类中定义的方法和变量,就像它们属于子类自己一样。Python中支持多重继承。如下代码表示Dog类继承Animal类并通过Dog(Animal)实现,在python中object类是所有类的父类,所以Animal继承object类。

class Animal(object):

def run(self):

print('Animal isrunning...')

class Dog(Animal):

pass

子类使用父类的run方法就像使用他自己的方法一样!

dog=Dog()

dog.run()

特征:

(1)继承关系是传递的。如果类C继承类B,类B继承类A(多继承),则类C既有从类B那里继承下来的属性与方法,也有从类A那里继承下来的属性与方法,还可以有自己新定义的属性和方法。继承来的属性和方法尽管是隐式的,但仍是类C的属性和方法。继承是在一些比较一般的类的基础上构造、建立和扩充新类的最有效的手段。

(2)继承简化了人们对事物的认识和描述,能清晰体现相关类之间的层次结构关系。

(3)继承提供了软件复用功能。如果类B继承类A,则建立类B时只需要再描述与基类(类A)不同的少量特征(数据成员和成员方法)即可。这种做法能减小代码和数据的冗余度,大大增加程序的重用性。

(4)继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。

(5)提供多重继承机制。从理论上说,一个类可以是多个一般类的特殊类,它可以从多个一般类中继承属性与方法,这便是多重继承。

多态

多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。类具有继承关系,并且子类类型可以向上转型看做父类类型。举一个例子大家就懂了

定义类Animal

class Animal(object):

def run(self):

print('Animal is running...'

定义类Chicken,重写Animal的run方法

class Chicken(Animal):

def run(self):

print('Chicken is running with 2 legs')

定义类Fish,重写Animal的run方法

class Fish(Animal):

def run(self):

print('fish is swimming')

chicken=Chicken()

chicken.run()

fish=Fish()

fish.run()

animal=Animal()

animal.run()

定义一个函数调用run方法

def which_animal_running(p_obj):

p_obj.run()

这种行为称为多态。也就是说,方法调用将作用在p_obj的实际类型上。它实际上拥有自己的 run()方法以及从Animal类继承的 run()方法,但调用 p_obj.run()总是先查找它自身的定义,如果没有定义,则顺着继承链向上查找,直到在某个父类中找到为止。

which_animal_running(chicken) #执行Chicken类的run方法

which_animal_running(fish) #执行Fish类的run方法

which_animal_running(animal) #执行Animal类的run方法

python面向对象难学_学不下去了!?详解Python面向对象核心概念,简历没跑了相关推荐

  1. 数学建模_随机森林分类模型详解Python代码

    数学建模_随机森林分类模型详解Python代码 随机森林需要调整的参数有: (1) 决策树的个数 (2) 特征属性的个数 (3) 递归次数(即决策树的深度)''' from numpy import ...

  2. python 协程可以嵌套协程吗_Python | 详解Python中的协程,为什么说它的底层是生成器?...

    今天是Python专题的第26篇文章,我们来聊聊Python当中的协程. 我们曾经在golang关于goroutine的文章当中简单介绍过协程的概念,我们再来简单review一下.协程又称为是微线程, ...

  3. python训练手势分类器_使用Pytorch训练分类器详解(附python演练)

    [前言]:你已经了解了如何定义神经网络,计算loss值和网络里权重的更新.现在你也许会想数据怎么样? 目录: 一.数据 二.训练一个图像分类器 使用torchvision加载并且归一化CIFAR10的 ...

  4. python123平台作业答案进制转换_各种进制转换详解-python

    (1)各个进制的符号:b:二进制:o:八进制:d:十进制:x:十六进制 在python中,bin(),oct(),hex()返回值均为字符串而且会带有0b,0o,0o前缀 (2)各个进制相互转换 a) ...

  5. python牛顿法计算平方根_常用的平方根算法详解与实现

    本文从属于笔者的数据结构与算法系列文章. SquareRoot 平方根计算一直是计算系统的常用算法,本文列举出几张简单易懂的平方根算法讲解与实现.其中Java版本的代码参考这里 Reference B ...

  6. python篮球弹跳训练方法_篮球弹跳力训练方法详解

    导读:小编根据大家的需要整理了一份关于<篮球弹跳力训练方法详解>的内容,具体内容: 弹跳是篮球运动的一个很重要因素,一个好的弹跳,可以大限度的展现出自己的实力,但是有些朋友弹跳不好,那么要 ...

  7. python心跳包原理_心跳包机制设计详解 转载

    存在下面两种情形: 情形一:一个客户端连接服务器以后,如果长期没有和服务器有数据来往,可能会被防火墙程序关闭连接,有时候我们并不想要被关闭连接.例如,对于一个即时通讯软件,如果服务器没有消息时,我们确 ...

  8. python官网下载步骤除了windows-python安装教程详解|python下载安装教程步骤

    Python是现在最受欢迎的编程语言,使用Python开发软件应用效率极高,相比其它语言有不可比拟的优势,Python是一种跨平台的计算机程序设计语言. 免费开源.最初被设计用于编写自动化脚本(she ...

  9. python全栈之巅_Python 迭代器、生成器详解 - Python全栈之巅

    迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,知道所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退. 使用迭代器的优点 对于 ...

最新文章

  1. ATS 6.2.1中缓存文件过期并不回源校验的“坑”
  2. 好想自己做个迷宫呀!
  3. asp.net mvc4 配置数据库连接的相关问题
  4. java oracle 乐观锁,oracle为什么默认乐观锁
  5. springcloud(九):配置中心和消息总线(配置中心终结版)
  6. Linux下数据库(sqlite3)学习笔记
  7. 推荐笔记本用户使用的硬盘。。。2.5”战胜台式机硬盘 日立7K320-250GB
  8. 计算机应用技术专业全国排名,计算机应用技术专业全国排名
  9. phpcms的phpcms_auth导致的任意变量覆盖漏洞、本地文件包含漏洞和任意文件下载漏洞...
  10. GB/T 36964-2018《软件工程 软件开发成本度量规范》国家标准正式发布
  11. python批量创建文件与批量创建文件夹
  12. java转integer_Java的Integer与int互转
  13. C++ set自定义排序
  14. vc excel编程
  15. tmall.item.simpleschema.add( 天猫简化发布商品 )
  16. 此计算机到未能识别网络连接,Win10未识别的网络无法连接到internet如何解决?操作方法...
  17. 找规律题(面试+练脑子)
  18. java AST 抽象语法树
  19. wlacm 骑马修栅栏 (图的遍历)题解
  20. 第一部分 思科九年 一(4)

热门文章

  1. 【java】java中文件监控WatchService使用
  2. 【guava】GuavaCache缓存失效的时候做一些操作 RemovalListener
  3. Spark报错:JDOFatalInternalException: Error creating transactional connection factory
  4. 95-080-048-源码-启动-启动standalonesession
  5. 【maven】idea maven slf4j : StackOverflowError
  6. sed: sed command a expects followed by text
  7. java中一个分而治之的框架ForkJoin
  8. 大白话系列之java_并发系列2-大白话聊聊Java并发面试问题之Java 8如何优化CAS性能?【石杉的架构笔记】...
  9. 强大,10k+点赞的 SpringBoot 后台管理系统竟然出了详细教程!
  10. java基础面试题之:String 类的常用方法都有那些?