零基础学Python—类

作者: Q科技 | 来源:发表于2019-03-28 21:05 被阅读10次

    关于面向对象的语言,Python也是其中一员,尽管它仅仅只是一门解释性语言,但这并不妨碍它使用类。C语言是一门完完全全的面向过程的语言,但是这并不意味着C语言不能够实现面向对象语言的特性,曾经我就干过这事,并且为此去修改了一个不开源的编译器。作为一个用了二十几年C的老程序员,对C语言我有着无与伦比的特殊情感。不仅仅是因为使用的时间长,而是C语言确实是可以达到最高的运行效率,并且有着最好的能效,而C++则有点过于侧重开发效率,尤其在C++11上,很多规则都被滥用。当然,某种程度上讲促进了硬件的发展,甚至打破了摩尔定律,但是这不是程序本应该有的模样。有点扯远了,回过头来,我们来看Python的类。

    对于Python的类,本质上和任何其他的面向对象的语言的类没有任何的差异。我们如何来理解类呢?我们可以从字面上去理解,我们有一类东西,我们希望给他们归个类,并且给他们定义一些基本的属性,这样我们就可以很容易的通过这个类别来构造一个具体的事物。比如我们定义一个鸟类,那么我们就可以给它定义一些基本属性,比如两条腿、两只眼睛等等。这样我们就能够不用在定义所有鸟的时候都要去重新设置这些属性,本质上来说,类是一种程序员友好的功能。

    面向对象的语言拥有一些基本的属于,我们现在就先来看看面向对象的一些基本术语和其解释。

    类:简而言之,类是一个对象原型。这个原型里实现了一系列的属性,这些属性可能是变量,也可能是方法,也可能兼而有之。

    类变量:类变量为所有类的实例所共享。类变量定义在类中、类的方法之外。

    函数重载:为特定的函数分配多个行为,实际调用因对象类型和参数而异。

    实例变量:定义在方法之内并且仅属于当前实例。

    继承:顾名思义,就是继承父类的属性。

    实例:类的其中一个对象。

    实例化:创建对象的过程。

    方法:定义在类中的函数。

    接下来,我们来配合代码来看看类的使用,以及什么情况下我们需要使用类。类的使用也非常简单,包括类的创建和类的实例化。我们先来创建一个简单的类,看看类到底是怎么一回事。

    大家可以看到,其实也很简单的。在上面的例子中,我们定义了一个类变量empCount,这个变量为所有的实例所共有。然后我们在类的初始化方法里定义了两个实例变量name和salary,这两个变量为当前实例所有。后面大家可以看到这个类里面还定义了两个方法,分别用来打印员工总数和员工名字和对应工资。当然,最上面还有一个名为__init__的方法,这个方法也成称为构造方法,在我们实例化的时候会自动调用这个方法。

    那么我们实际使用的时候要怎么做呢?我们知道,类只是一个原型,只有我们在使用类方法的时候才可以不去实例化,关于这点我们下面会有例子来说明,事实上,我们在后续的文章里也会让大家多次看到类方法的例子。一般情况下,我们都是需要去实例化类的。那么我们来看看怎么实例化。实例化类之后,大家可以实际去看看类占多少内存。然后在使用结束我们可以用del来释放内存。这主要是给大家一个好的示范,我们在使用类的时候尽量主动去释放内存,而不要让垃圾回收机制来工作,其实作为一个C程序员,我一直反对垃圾回收机制,作为程序员,内存是应该有程序员来管理的。一个优秀的程序员能将程序的内存使用控制到最优,将效率和内存占用平衡到最佳,这是很多的Java程序员一无所知的部分。也正是因为这个原因,我们说,事实上,现在是存在非常严重的硬件浪费的。回到正题,我们来看类的实例化。

    也很简单对吧,我们只需要使用类名加一对小括号就能完成类的实例化。那么实例化到底是一个什么样的过程呢?我们可以这样来理解,我们有一个克隆人本体,这个克隆人本体相当于我们的类,然后我们通过这个克隆人本体来克隆我们的每一个实体的人,我们克隆的人都是由这个本体而来,那么我们克隆人的这个过程称之为实例化,克隆出来的人称为实例。实例化之后,我们就可以调用它的方法了。下面我们来看看调用类的方法的例子。

    大家可以看到我们使用点来访问类的方法,其实我们除了用点来访问类的属性之外还可以用如下四个函数来访问类的属性。

    getattr(obj, name[, default])

    hasattr(obj,name)

    setattr(obj,name,value)

    delattr(obj, name)

    这四个函数见名知意,我们可以来看看它们的用法。

    接下来,我们来介绍继承,继承其实也很简单,谈到继承,我们就得谈到父类和子类,其实和真实世界的例子是一样的,比如我们有一动物类,那么鸟类和熊类都属于动物类,鸟类和熊类都继承了动物类的属性比如有脚有眼睛,但是鸟类只有两只脚,而熊类有四条腿。当然我们这里讲的是继承,我们来看一个例子就明白了。

    定义了一个类之后,很容易去定义一个子类。在Python中还有两个函数可以检查类和实例、类和子类的关系,分别为:

    issubclass(sub, sup)

    isinstance(obj, Class)

    在Python里同样也可以覆盖父类方法,因为我们有时候会需要将子类行为定义为与父类稍有不同,那么我们会需要去覆盖父类的方法,比如我们有一个我们来看一个例子。

    我们关于类就聊这么多,当然还有一些杂七杂八的特性,我们就不聊了。对于初学者来说,只需要理解这些就足够了,任何一门语言始终是在使用中精通。

    人工智能与深度学习做量化请关注:AI量化(https://t.zsxq.com/RvfY37y) 星球限时免费,如需加入,请私信我获得免费邀请码!

    零基础学习Python与深度学习应用请关注星球:Python与深度学习 https://t.zsxq.com/bUFayZ3

    微信公众号:QTechAI

    相关文章

      网友评论

        本文标题:零基础学Python—类

        本文链接:https://www.haomeiwen.com/subject/ymqhbqtx.html