Python进阶核心知识点(1) - 一切皆对象

我们都知道python是面向对象的高级编程语言,在学习Python的过程中也经常听到在python中一切皆对象这种说法。一切皆对象,这句话到底该怎么理解呢?

要充分理解这句话,首先要理解对象(object)、和类(class)的概念,以及对象和类的关系。

1. 实例化

类和对象在编程世界里的意义其实是从现实世界中引申出来的。首先第一点,类是一个抽象的概念,不是一个具体的事物。它(类)只存在于我们的思维世界里。为什么我们要发明“类”这个概念,要从我们人类认识世界,改造世界的行为说起。

我们把自然界的万物分门别类,分为动物、植物微生物等。而动物又可以进一步分为爬行动物、哺乳动物等。但自然界中并不存在什么爬行动物、哺乳动物,这些只是概念,是我们为了更加深入了解这个世界而发明的。自然界里真实存在的只是小明家阳台上那只喜欢吃肉的乌龟和楼下小王那只调皮的大金毛。

人类对万事万物进行分门别类的来认识和理解,根本上是为了更好的归纳知识和理解这个世界,或者说是大脑还够发达,只能用这种折中的方案来高效的处理自己和自然界的关系。而且人类的这种行为处处存在,影响着我们的每一个举动。我们把衣橱划分为几个区域分别存放冬天的衣物和夏天的衣物而不是混在一起;图书馆里的书籍也是按照分成文学、历史、自然科学等门类分放于不同的区域;甚至大到一个城市分为居住区和工业区。之所以有分类的概念,是因为随着人类认识世界的深入,产生的知识总量越来越大,大到一个人的脑袋再也无法知全貌而只能做一些简化了。最好的简化方法就是归纳提炼在抽象,于是就产生类的概念。

在回到编程语言,面向对象这个编程语言之所以在当今更加流行,是因为它更好的符合了我们的直觉,更加符合我们如今处理这个直接的思维方式。
从现实世界中的类和具体事物的关系来类比python中的class(类)和object(对象)的关系: 即python中我们实际处理的,比如说命名,赋值,参与各种运算的都是实例,也就是各种对象object,它对应现实世界中各个活生生的人或者动物实例。而这些实例不能无缘无故产生,它们是由一个“工厂”造出来的,这个工厂就是类。类造出对象这个过程就是一个对象通过类实例化的过程,一个从抽象到具体的过程。

下面通过实例来演示。
我们知道python中可以通过type函数查看一个对象的类型,即属于哪个类,另外一层意思就是该对象由哪个类实例化而来。

a, b = 7, 8
c,d = 'hello', 'python'
type(a), type(c)
>>>
(int, str)
# 查看int类和str类的类型
type(int), type(str)
>>>
(type, type)
# 查看type类的类型
type(type)
>>>
type

print('a+b = {}'.format(a+b))
print('c+d = {}'.format(c+d))
>>>
a+b = 15
c+d = hellopython

通过上面的type查看类的实例化链条可以发现:

  1. 所有python中的内置的类如int、str、list等都是由type类实例化出来的对象,而我们经常用到的具体的实例如7,8,”python“字符串等都是相应的类实例化得来。万物皆对象在这里包含三层意思:
      1. 具体的实例对象由相应的类创造(实例化)
      1. 类也是对象,它是由type类实例化而来
      1. 甚至type类也是对象,但是它比较特殊,它是由它本身实例化而来, 这样type就是所有类最顶层的类。这样的设计避免无限循环。

简写成链条形式:type --> class --> object, 或者对应成type --> int --> 3

再思考: 这种由类实例化对象设计模式有什么好处呢?
好处是显而易见的,为什么上面的 “7+8 =15”而不是“78”, 为什么“hello” + ’python“的结果是”hello python“而不是对应的acll码相加呢?
因为类是封装对象是属性和行为的载体,也就是说int和str类有哪些行为和属性已经封装在int和str类的定义中了,从而规定了通过int和str类实例化的对象具有哪些行为

由上总结出对象和类的关系:类是对象的抽象,对象是类是实例。在类中,对象的行为是以方法的形式定义的,对象的属性是以成员变量的形式定义的,而类包括对象的属性和方法。

实例化是类和对象的第一层关系

2. 父类子类的继承关系

继承是面向对象编程语言的另一个特性。所谓的继承是指子类可以继承父类的属性和方法。在python中可以通过.base来查看一个类的父类

class Car:
    pass

class Suv(Car):
    pass

audi = Car()
jeep = Suv()

上面的代码中我们先创造了一个类Car, 之后用Car创造了一个子类Suv, 之后分别由这两个类实例出一个对象audi和jeep。我们先查看之前说的实例化链条:

print('check the object is instance from which class')
print(type(audi))
print(type(jeep))
print("-" *10)

print('check the class is instance from which class')
print(type(Car))
print(type(Suv))
>>>
check the object is instance from which class
<class '__main__.Car'>
<class '__main__.Suv'>
----------
check the class is instance from which class
<class 'type'>
<class 'type'>

和我们之前说的一致: type -->Car/Suv --> audi/jeep
在查看他们的继承关系:

# 每个类都可以通过.__base__()方法查看基类
print(int.__base__)

print(Suv.__base__)
print(Car.__base__)
print(object.__base__)
print(type.__base__)
>>>
<class 'object'>
<class '__main__.Car'>
<class 'object'>
None
<class 'object'>

即:

  1. 所有内置的类(int/str...)的父类(或者叫基类)都是object
  2. python中自定义的类如果指明继承关系,自动继承object父类
  3. 作为所有类的最后的基类——object类, 它的父类是空(None)
  4. 既然object是最终的父类,那么毫无疑问,type类的父类也是object

所以:

  1. 类object是类中父子继承关系的顶端,所有的类的最终父类都是它;
  2. type是类型实例关系的顶端,所有对象都是它的实例的。
    object和type'它们两个的关系可以这样描述:
  3. object is and instance of type,即Object是type的一个实例。
  4. type is kind of object,即Type是object的子类。

最后用下面这张图表达全景:

image.png

type:

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容