Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。如果接触过java语言同学应该都知道,Java面向对象三大特征是:封装、继承、多态。Python面向对象也有一些特征,接下来我们先来简单的了解下面向对象的一些基本特征。

基本特征

  • 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
  • 方法:类中定义的函数。
  • 实例化:创建一个类的实例,类的具体对象。
  • 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。
  • 方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。

使用 class 语句来创建一个新类,class 之后为类的名称并以冒号结尾,注意,类名开头字母一般为大写,如下代码所示:

class 类名:
class_suite #类体,由类成员,方法,数据属性组成。

创建一个类

class People(object):

    def __init__(self, name):
self.name = name def run(self):
print('{}在跑步'.format(self.name))

注意:

  1. 第一种方法__init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法。
  2. self 代表类的实例,self 在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。

方法

上一篇我们学过函数,知道如何创建一个函数。但是如果在类中创建函数,我们不叫函数,我们称作为方法。在创建People类的时候,其实已经构造了一个run方法。需要注意的是,类中的方法需要加一个self,如def run(self):

实例化

类实例化比较简单,如下代码所示:

class People(object):

    def __init__(self, name):
self.name = name def run(self):
print('{}在跑步'.format(self.name)) People1 = People("testDog") # 创建一个People对象
People1.run()

我们创建了一个People类,People类有一个构造函数,当我们创建一个People类的对象时需要传入一个参数,创建的对象可以调用People类中的方法

继承

面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。

继承实例

class People(object):

    def __init__(self, name, age):
self.name = name
self.age = age def run(self):
print('{}已经长大了,可以跑步'.format(self.name)) def not_run(self):
print('{}还没长大,不可以跑步'.format(self.name)) class Child(People): def eat(self):
print("{}饿了,需要吃饭".format(self.name)) testDog = Child("testDog", 5)
testDog.run()
testDog.eat()

上面代码将输出如下内容:

testDog已经长大了,可以跑步

testDog饿了,需要吃饭

我们创建了一个People类,我们每个人都有属性,比如姓名,年龄。我们在People类中定义2个方法,满足年龄可以跑步,不满足年龄不可以跑步。我们创建一个子类Child类,子类Child继承父类People时,我们可以直接使用父类的属性和方法。为什么我们创建Child类对象时需要传入2个参数?这是因为子类继承父类时,如果父类有构造函数,那么我们也需要调用这个构造函数并进行传参。

方法重写

如果你的父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法:

class People(object):

    def __init__(self, name):
self.name = name def run(self):
print('{}在跑步'.format(self.name)) class Student(People): def run(self):
print('自从{}失恋后,{}就不再跑步了,把时间花在找女朋友身上'.format(self.name, self.name)) testDog = Student("testDog")
testDog.run()

上面代码将打印如下内容:

自从testDog失恋后,testDog就不再跑步了,把时间花在找女朋友身上

类的私有属性与私有方法

类的私有属性

__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs。

类的方法

在类的内部,使用 def 关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数

类的私有方法

__private_method:两个下划线开头,声明该方法为私有方法,不能在类的外部调用。在类的内部调用 self.__private_methods

class People(object):
__age = 22 # 私有变量
name = "wangfei" # 公开变量 def __run(self):
print("不喜欢让别人看到自己跑步") def secret(self):
print("调用私有属性__age:{}".format(self.__age))
self.__run() # 调用私有方法 wangfei = People()
print(wangfei.name)
wangfei.secret()

注意:我们可以在类中调用__age和__run,但是我们创建一个类对象时,我们不可以调用私有属性和方法。

小结:当然面向对象内容远不止笔者写的这些,写简单的原因是如果一次性灌输太多内容,可能会适得其反,造成看2行就出现头晕目眩现象。这里只是给大家介绍个大概,让大家对面向对象有一个简单的了解。我们的主题还是Python实现接口测试,Python我们不会花非常多的时间去进行讲解。关于Python语言的深入,建议大家多看些资料。

欢迎关注微信公众号:软件测试汪。软件测试交流群:809111560

10. Python面向对象的更多相关文章

  1. 10.python面向对象进阶功能

    isinstance(obj,cls)和issubclass(sub,super)(1)isinstance(obj,cls)检查一个对象obj是否是一个类cls的实例(2)issubclass(su ...

  2. 10 . Python之面向对象

    面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向对象初识别 面向过程v ...

  3. python 面向对象初级篇

    Python 面向对象(初级篇) 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发" ...

  4. Python 面向对象 基础

    编程范式概述:面向过程 和 面向对象 以及函数式编程 面向过程:(Procedure Oriented)是一种以事件为中心的编程思想. 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现 ...

  5. python面向对象进阶(八)

    上一篇<Python 面向对象初级(七)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

  6. python 面向对象(进阶篇)

    上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...

  7. python 面向对象编程学习

    1. 问题:将所有代码放入一个py文件:无法维护 方案:如果将代码才分放到多个py文件,好处: 1. 同一个名字的变量互相不影响 2.易于维护 3.引用模块: import module 2.包:解决 ...

  8. python 面向对象和类成员和异常处理

    python 面向对象 你把自己想象成一个上帝,你要创造一个星球,首先你要把它揉成一个个球,两个直径就能创造一个球 class star: '''名字(name),赤道直径(equatorial di ...

  9. python 面向对象学习

    ------Python面向对象初 下面写一个类的简单实用,以便方便理解类 #python 3.5环境,解释器在linux需要改变 #阅读手册查询readme文件 #作者:S12-陈金彭 class ...

随机推荐

  1. Kubernetes 技能图谱skill-map

    # Kubernetes 技能图谱 ## Container basics (容器技术基础)* Kernel* Cgroups* Userspace runtime* Image* Registry ...

  2. HTML5: HTML5 Geolocation(地理定位)

    ylbtech-HTML5: HTML5 Geolocation(地理定位) 1.返回顶部 1. HTML5 Geolocation(地理定位) HTML5 Geolocation(地理定位)用于定位 ...

  3. Mamen所需要的jar包怎么生成

    Mamen所需要的jar包怎么生成 使用 mamen 难免碰到,不知道的 jar 包,不知道怎么在 pom 文件中写,分享一个网址,可以把你想要的 jar 包生成 pom 配置文件,个人感觉非常好用. ...

  4. mybatis plus CRUD

    首先我们的项目建立之后我们要建立一个实体类来对应我们的数据裤中的信息 employee import com.baomidou.mybatisplus.annotation.IdType; impor ...

  5. 【转】开源框架是如何通过JMX来做监控的(一) - JMX简介和Standard MBean

    原文链接:https://www.cnblogs.com/trust-freedom/p/6842332.html#autoid-0-0-0 相信很多做Java开发的同学都使用过JDK自带的 jcon ...

  6. 1.tensorflow——线性回归

    tensorflow 1.一切都要tf. 2.只有sess.run才能生效 import tensorflow as tf import numpy as np import matplotlib.p ...

  7. ES6 基础内容介绍

    参考博客: https://www.cnblogs.com/libin-1/p/6716470.html 一.新的变量声明方式 let/const 与var不同,新的变量声明方式带来了一些不一样的特性 ...

  8. 力扣算法——133.CloneGraph【M】

    Given a reference of a node in a connected undirected graph, return a deep copy (clone) of the graph ...

  9. Cocos2d-x之Node

    |   版权声明:本文为博主原创文章,未经博主允许不得转载. 节点是cocosd-x游戏引擎中的重要元素,是其他重要游戏元素的基类,例如,场景Scene,图层Layer,菜单Menu和精灵sprite ...

  10. hql例子

    /** * 根据搜索条件查询商品(带缓存) */ public List<ResultInfo> getSearchGoodsList(GoodsTypeCondtionBizBean c ...