Python简明教程第7节:面向对象(一)

第六步尚未完成,先看第七步好了。

面向对象

面向对象是一种编程思想,是相对于面向过程而言的。

简单来说,面向对象的编程思想其实一种懒人思想,什么都不做,什么都交给对象做。既然什么都要交给对象做,你起码需要一个对象嘛,那么你要在茫茫人海中寻找那个能帮你做事的人么,还是确定下特征来缩小范围比较好,比如你需要的这个对象:25岁左右,女性,短发,会做饭,会暖床……满足这些条件的也一定很多,你找到其中一个就行了,然后让她帮你做事情就好了。

上面的过程,其实大概就包含了面向对象的思想,抽象,实例化之类的内容……也就是大概,可能不太准确。这种思想需要慢慢领悟。

相关概念

类:用来描述一个具有相同的属性和方法的对象的集合。

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

类变量:类变量在整个实例化的所有对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。

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

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

Person类:

《Python简明教程第7节:面向对象(一)》 Person类

关于类和对象的最基本内容大概就是上图展示的这些,下面逐一讲解:

创建类

class ClassName:

    类体    #由类变量,方法,实例变量组成

tips: 

我们可以通过内置类属性查看类的相关信息

__dict__ : 类的属性,以字典形式显示,由类的数据属性组成

__doc__ :类的文档字符串

__name__: 类名

__module__: 类定义所在的模块

__bases__ : 类的所有父类(元组)   这里涉及到继承,后面再说。

《Python简明教程第7节:面向对象(一)》 内置类属性

创建对象

类的实例化类似函数调用。

p = Person(“liyisi”, 20, “male”)

tips:

访问属性用“ .  ”来完成,例如 p.name      p._age

你甚至可以添加,删除类的属性。p.school = “peking unibersity” 这样就添加了一个属性   del  p.school 就可以删除该属性了。

添加和删除类的属性还可以使用下面的方法来实现:

setattr(obj,name,value) : 设置一个属性。如果属性不存在,会创建一个新属性。delattr(obj, name) : 删除属性。

除此之外:

getattr(obj, name[, default]) : 访问对象的属性。hasattr(obj,name) : 检查是否存在一个属性。

《Python简明教程第7节:面向对象(一)》

对象销毁

Python 使用了引用计数这一简单技术来跟踪和回收垃圾。

其实对象的销毁也对应着一个方法:

def  __del__(self):

      class_name = self.__class__.__name__     

        print (class_name, “销毁”)

《Python简明教程第7节:面向对象(一)》

《Python简明教程第7节:面向对象(一)》

当一个对象被创建之后, 就创建了一个引用计数, 当这个对象不再需要时, 也就是说, 这个对象的引用计数变为0 时, 它被垃圾回收。但是回收不是”立即”的, 由解释器在适当的时机,将垃圾对象占用的内存空间回收。

垃圾回收机制不仅针对引用计数为0的对象,同样也可以处理循环引用的情况。循环引用指的是,两个对象相互引用,但是没有其他变量引用他们。这种情况下,仅使用引用计数是不够的。Python 的垃圾收集器实际上是一个引用计数器和一个循环垃圾收集器。作为引用计数的补充, 垃圾收集器也会留心被分配的总量很大(及未通过引用计数销毁的那些)的对象。 在这种情况下, 解释器会暂停下来, 试图清理所有未引用的循环。

在了解了对象创建和销毁的相关概念之后,我们说一哈继承。

继承

相对于面向过程而言,面向对象的编程带来的主要好处之一就是代码的重用,实现这种重用的方法之一是通过继承机制。继承完全可以理解成类之间的类型和子类型关系。继承的语法如下:

class  className ( BaseClass ):

        class_suite

《Python简明教程第7节:面向对象(一)》 继承实例

关于上面的实例,我们看到在子类中并没有定义getAttr()等方法,但是我们却可以使用之类的实例来调用这些方法,这就是继承给我们带来的便利。由于子类继承了父类,就相当于在子类中也定义了父类的属性和方法。这就是代码的重用。

多继承

像 C++ 一样,python 支持多继承,和单继承具有相似的格式,只是父类有多个。

class  className(Base1, Base2, Base3): 

           class_suite

继承的好处之一就是要重用父类中的属性和方法,那么在多继承的时候,如果多个父类中具有相同的属性和方法又当如何呢?

此时,python 给出的解决方法是,按照继承顺序搜索,也就是从左往右匹配得到需要的内容。

方法重写

有的时候父类方法的功能不能很好地满足我们对程序的需求,这个时候,我们可以对父类的方法进行重写,使之符合我们的需求。如下:

《Python简明教程第7节:面向对象(一)》 重写
《Python简明教程第7节:面向对象(一)》 结果

可以看到的是,在子类和父类中都有一个myMethod()方法且有不同的实现,我们在使用之类调用的时候执行的是子类重写后的方法,而不再是父类的方法。

在python中继承中的一些特点:

1.可以多继承,就是说一个子类可以有多个父类。

2.父类中构造需要手动调用

Then,that’s all,thank you。

关注「Python旧巷」,和小编一起学习Python吧

《Python简明教程第7节:面向对象(一)》

    原文作者:老友旧巷
    原文地址: https://www.jianshu.com/p/fd6b28fd5a0a
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞