13 极速了解Python中的对象

面向对象(Object Oriented)的编程方法可是说是近几十年来对计算机编程影响最大的方法论,没有之一。Python语言也受到了这种影响,整个3.x系列版本的语言设计都是基于面向对象的方法的。


所谓“对象”,英语是object,可以理解成一种分类方法,例如对于“人”我们就可以分为“男人”和“女人”两类,那么“男人”就叫做一个“对象类”,“女人”当然也是一个对象类。某一个具体的男人,例如“亚当”,就叫做对象类“男人”的一个“对象实例”,简称“实例”;那么“夏娃”当然就是对象类“女人”的一个实例了。前面的“人”也可以看作是一个对象类,我们一般把它叫做是“男人”和“女人”这两个对象类的“父对象类”,而“男人”和“女人”就是“人”的子对象类,一般来说,子对象类具有父对象类的所有特征,而父对象类不一定有子对象类的所有特征。有时候,我们定义“人”这个对象类只是为了把“男人”和“女人”两个对象类放在一起便于管理,这时候由于“人”包含了“男人”和“女人”两种对象类,所以我们也可以把它叫做一个“包”(package),一个包中可以包含很多个对象类。人们在实际开发中,提到“对象”这个词的时候,有时候是指“对象类”,有时候是指“对象实例”,需要我们根据上下文来判断。


使用对象来对事物进行分类的目的是:把和事物有关的数据和行为都合并在一个对象类中,这样看起来逻辑更清晰、管理起来更方便。这么说可能比较抽象,实际上我们定义一个对象类,主要是为了把和它有关的变量和函数集中起来管理。我们看一下具体的例子来更好地理解:


我们在Python交互式环境中输入:


import sys


这句话的作用,是导入一个叫做“sys”的对象类,import是“导入”的意思;Python虽然内置了一些对象(整数、字符串这些都是对象),但是剩余大多数即使是Python安装后自带的对象(或者叫包,一个包有时候可能含有多个对象),也需要在使用前用这种方法来导入。其余第三方提供的包,当然也需要导入。


“sys”是一个包含了和Python语言系统相关的变量和函数的对象类包,以后对这些对象类包我们都直接称为“对象包”或更简单的“包”。导入sys对象包后,我们就可以这样来使用sys中已经定义好的变量和函数:



2.48 使用sys包中函数的执行结果截图

如图2.48截图中所示,我们使用某个对象的变量和函数时,都要在对象名字后面加一个小数点“.”,然后再写变量或函数的名字,例如sys.version就代表了一个变量,里面存放了Python的版本号,我们使用print(sys.version)就把它输出了。而sys.getwindowsversion()则是一个函数,因为后面有一对空的小括号,说明它是一个不需要任何参数的函数。sys.getwindowsversion()这个函数的作用是获取Windows系统的内部版本号。最后,我们用了sys对象带有一个参数的函数sys.exit(0),它的作用是从当前程序退出,并把它的参数(这里是0)返回给调用它的上级程序,一般来说,如果我们在命令行界面中执行程序,它的上级程序就是操作系统本身。


我们一般把对象的变量叫做对象的“属性”或“成员变量”,把对象的函数叫做对象的“成员方法”或“成员函数”。这也好理解,变量和函数都是这个对象的成员(member)嘛。


最后,介绍一下对象类的成员与对象实例的成员的区别。前面我们说的成员变量和成员函数其实都是对象类的成员。但是有时候某些成员不是针对对象类的,而是针对对象实例的。我们看看下面这个例子:



图2.49 对象实例的成员函数

我们前面说过,数字也是一种对象,那么图中a = 1.0 这条语句,实际上的作用是新建了一个浮点数对象类的实例a,然后把1.0这个数值存放在a这个实例中,而浮点数的对象实例是可以调用“is_integer()”这个成员函数的,它的作用是判断当前存的数值是否是一个整数(也就是说小数点后是0),所以我们可以看到图中判断a是一个整数(is_integer函数返回True,表示判断成立),而b因为数值是1.2,所以判断不是一个整数(is_integer函数返回False,表示判断不成立)。


这个例子中可以看到,浮点数作为一个对象类来说,是不会有is_integer()这个成员函数的,因为浮点数是所有的小数的总称,如果不知道具体是哪个数,是无法来判断是否是整数的,也就是无法调用is_integer()这个函数;只有对某个浮点数的实例,也就是说确定了数字是什么,例如上面的a和b都是确定了数值的浮点数的实例,才能调用is_integer()去判断它是否是整数。


另外,由于在Python中所有东西都可以理解成对象,那么所有类型的变量也都可以理解成存储了一个对象,所以我们有时候也把具体的某个变量叫做某个对象;当然,变量一般都是对象实例。


如果到这里,还能够理解,那么恭喜你,你已经掌握了面向对象编程的大部分概念了。

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

推荐阅读更多精彩内容