python面向对象

面向过程:根据业务逻辑从上到下写代码。

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

面向对象:将数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程。

面向对象(object-oriented ;简称: OO)至今还没有统一的概念 我这里把它定义为:按人们 认识客观世界的系统思维方式,采用基于对象(实体)的概念建立模型,模拟客观世界分析、设 计、实现软件的办法。

面向对象编程(Object Oriented Programming-OOP)是一种解决软件复用的设计和编程方法。 这种方法把软件系统中相近相似的操作逻辑和操作 应用数据、状态,以类的型式描述出来,以对象实例的形式在软件系统中复用,以达到提高软件开发效率的作用。

面向对象的三大特征:封装、继承、多态

封装

封装是面向对象的特征之一,是对象和类概念的主要特性。

封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

继承

面向对象编程(OOP)语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

通过继承创建的新类称为“子类”或“派生类”。

被继承的类称为“基类”、“父类”或“超类”。

继承的过程,就是从一般到特殊的过程。

要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。

在某些OOP语言中,一个子类可以继承多个基类。但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。

多态

多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。

实现多态,有二种方式,覆盖,重载。

覆盖,是指子类重新定义父类的虚函数的做法。

重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。

1、实现对类的定义

定义一个类Car,并创建两个对象BMW和benz。



如果我们创建多个对象时,都向上图一样一次次为属性赋值比较麻烦,下面调用方法缩减工作量。

观察如下代码:



使用__init__()方法可以在创建对象时为对象的属性赋值。

def __init__(self,参数,...):

赋值

__init__()方法在创建一个对象时默认被调用,不需要手动调用。

Self参数不需要开发者传递,python解释器会自动把当前的对象引用传递进去。

BMW1也指向BMW所指向的地址。所以,给BMW1.name赋值以后,该地址内所存储的信息发生了变化,输出也就跟着变了。

使用id()查看内存地址


在对象转成字符串的时候调用__str__(self):这个方法,并将此方法的返回值返回,所以该方法必须有返回值return,并且返回的是一个字符串。




在python中如果方法名是__xxxx__(),那么就有特殊的功能,因此叫做“魔法”方法。当使用print输出对象的时候,只要自己定义了__str__(self)方法,那么就会打印从在这个方法中return的数据(如上图结果)。

可以把self当做C++中类里面的this指针一样理解,就是对象自身的意思。某个对象调用其方法时,python解释器会把这个对象作为第一个参数传递给self,所以开发者只需要传递后面的参数即可。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、面向对象,这个对象到底是什么? 这个对象不是python中的实例,python中我们把一个类的实例也叫做对象,...
    youngkun阅读 956评论 0 2
  • 作者:武沛齐原文出处:http://www.cnblogs.com/wupeiqi/ 概述 面向过程:根据业务逻辑...
    IT程序狮阅读 945评论 1 29
  • 类相关知识 对象相关知识 类属性增删改查 实例属性增删改查 对象与实例属性 静态属性 类方法 静态方法 组合 继承...
    Techml阅读 432评论 0 0
  • 面向对象(Object Oriented Programming,OOP) ·1)解决菜鸟买电脑的故事 第一种方式...
    西多的大叔阅读 412评论 0 1
  • 已解决:如何给已定义过的类直接添加新方法而不重新定义类?加入新属性/方法:可以用setattr()但是不可以直接类...
    JEZAU阅读 1,448评论 0 2