目前,编码能力已经成为考生面试考核的刚需。对于测试开发,需求量最大的两种语言是java和python,这两种语言也是面向对象的语言。对于刚入门coding的同学来说,面向对象的概念比较难理解,面向对象编程相关的知识点是面试中经常被问到的问题。核心概念并通过代码实现,帮助大家更好的理解!面向对象的基本对象对象有两个层次的概念,现实生活中的对象是指客观世界的实体;而程序中的对象是一组变量和相关的方法,其中变量表示对象的状态,方法表示对象的状态和行为。现实生活中的对象可以抽象出来映射为程序中的对象。对象是对现实的高度抽象。类对象在程序中用一个抽象数据类型来描述,这个抽象数据类型就是Class。类是描述一个对象的“基本原型”,它定义了一类对象可以拥有的数据和操作。在面向对象编程中,类是程序的基本单元。类和对象的关系对象是类的实例。创建对象意味着类被实例化。从代码的角度来说,就是在内存中开辟一个新的地址空间来运行程序。一个类可以创建无数个实例(只要计算机内存足够大),用python代码实现如下:dog=Animal()即对象dog是类Animal的一个实例。属性存储对象的状态,可以理解为变量。方法实现了对象的行为,可以理解为函数。以上就是面向对象理论的解释。我们以去动物园看动物为例。我们通常说要看动物,但是没有人能看到抽象的动物,我们只能看到一种特定的动物。这里的动物是一个类的概念,具体我们看的动物,比如:东北虎就是例子。动物的种类、颜色、性别是动物的属性,动物的基本能力,比如跑、吃、叫等,我们可以定义为方法。面向对象的三大原则面向对象的三大原则包括:封装、继承和多态。封装封装实际上是使用方法来隐藏类的数据,控制用户可以修改类和访问数据的程度。我们在使用api的时候,如果提供者不给我们源代码,我们无法知道它的内部实现,但这并不妨碍我们使用api。简单规则如下:xx:公共变量或方法;_xx:变量或方法前的双下划线,外部不能直接访问;classDemo(object):public_var="publicvariable"__private_var="privatevariable"defpublic_func(self):print("publicmethod")def__private_func(self):print("privatemethod")d=Demo()d.public_func()d.__private_func()代码执行时会报错:AttributeError:'Demo'Theobjecthasnoattribute'__private_func'错误信息表示在Demo中找不到方法__private_func,因为方法是私有方法,不能被Demo类以外的模块或类调用!因此,在设计类中的方法或属性时,需要考虑是否需要被外部调用。如果需要,就设计成xx的形式,如果不需要,就设计成__xx的形式。对于刚入门coding的小白来说,将属性和方法都设计成可以共享的就够了。继承继承是面向对象编程语言的另一个基本特征,通过继承可以实现代码重用。被继承的类是子类,被继承的类是父类,所有直接或间接继承的类都是父类。继承是子类使用父类中定义的方法和变量的地方,就好像它们属于子类本身一样。Python支持多重继承。下面的代码表示Dog类继承自Animal类,通过Dog(Animal)实现。在python中,对象类是所有类的父类,所以Animal继承自对象类。classAnimal(object):defrun(self):print('Animalisrunning...')classDog(Animal):pass子类使用父类的run方法就像使用自己的方法一样!dog=Dog()dog.run()特点:(1)继承关系是可传递的。如果C类继承了B类,B类又继承了A类(多重继承),那么C类不仅继承了B类的属性和方法,还继承了A类的属性和方法,而且还可以有自己的newDefined属性和方法。继承的属性和方法,虽然是隐式的,但仍然是类C的属性和方法。继承是在一些更通用的类的基础上构造、建立和扩展新类的最有效手段。(2)继承简化了人们对事物的理解和描述,能够清晰地反映相关类之间的层次关系。(3)继承提供了软件重用功能。如果B类继承了A类,在创建B类时只需要描述少量与基类(A类)不同的特性(数据成员和成员方法),这种方式可以减少代码和数据的冗余,大大增加了程序的可重用性。(4)继承通过增强一致性减少了接口和模块之间的接口,大大增加了程序的可维护性。(5)提供多重继承机制。从理论上讲,一个类可以是多个通用类的一个特殊类,它可以继承多个通用类的属性和方法,这就是多重??继承。多态性(Polymorphism)字面意思是“多种状态”。在面向对象的语言中,接口的多种不同实现被称为多态性。引用CharlieCalverts对多态的描述——多态是一种允许您将父对象设置为等于其一个或多个子对象的技术。赋值后,父对象可以根据当前值赋给其子对象不同的属性工作方式。类具有继承关系,子类类型可以向上转化为父类类型。举个例子大家就明白了#定义Animal类Animal(object):defrun(self):print('Animalisrunning...'#定义Chicken类,重写Animal类Chicken(Animal)的run方法:defrun(self):print('Chickenisrunningwith2legs')#定义类Fish,重写Animal的run方法classFish(Animal):defrun(self):print('fishisswimming')chicken=Chicken()chicken.run()fish=Fish()fish.run()animal=Animal()animal.run()#定义一个函数调用run方法defwhich_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方法
