在python中,一切皆对象,应该怎么理解呢??

先来看几个例子:

[root@localhost ~]# python3
Python 3.6.3rc1 (default, Feb 26 2018, 22:34:25)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 1 # 定义一个变量,值为1
>>> type(a) # 查看变量a的类型,可以看出变量a是由int类实例而来
<class 'int'>
>>> type(1) # 查看整数1的类型,结果也是由int类实例而来
<class 'int'>
>>> type(int) # 查看int类的类型,得出结论:int类型是由type类实例化而来
<class 'type'>
>>>
>>> str1 = 'aa' # 定义一个变量,值为'aa'字符串
>>> type(str1) # 查看变量str1的类型,可以看出变量str1是由str类实例而来
<class 'str'>
>>> type('aa') # 查看'aa'字符串的类型,结果也是由str类实例而来
<class 'str'>
>>> type(str) # 查看str类的类型,得出结论:str类型是由type类实例化而来
<class 'type'>
>>>
>>> class Goods: # 自定义一个Goods商品类
... pass
...
>>> good1 = Goods() # 实例化Goods类,得到实例化对象good1
>>> type(good1) # 查看good1的类型,可以看到是由Goods类实例化出来的
<class '__main__.Goods'>
>>> type(Goods) # 查看Goods类的类型,得出结论:Goods类是由type类实例化而来的
<class 'type'>

同理,我们也可以使用type方法查看list,tuple,dict,set等数据类型的类型,这些数据类型都是由type类实例化来的

>>> type(list)
<class 'type'>
>>> type(tuple)
<class 'type'>
>>> type(dict)
<class 'type'>
>>> type(set)
<class 'type'>

所以,可以得出结论:

在python3中,所有数据类型的变量都是由对应的类来创建的,而创建数据类型的类都是由type类实例化得到所以,python中所有的数据类型都是type类实例化来的

在上面的例子里,定义一个Goods类,然后根据Goods类实例化good1对象

>>> Goods.__bases__				# 查看Goods类的基类,结果为object类
(<class 'object'>,)
>>> class TestGoods(Goods): # 再定义一个TestGoods类,继承Goods类
... pass
...
>>> TestGoods.__bases__ # 查看TestGoods类的基类,结果显示为Goods类
(<class '__main__.Goods'>,)

所以,在定义类时,如果未指定类所继承的父类,其基类都是object

从上面的例子知道,所有数据类型的变量都是由对应的类来创建的

>>> int.__bases__				# 查看int类的基类,结果为int类是继承自object类的
(<class 'object'>,)
>>> str.__bases__ # 查看str类的基类,结果为str类是继承自object类的
(<class 'object'>,)
>>> tuple.__bases__ # 查看tuple类的基类,结果为tuple类是继承自object类的
(<class 'object'>,)
>>> list.__bases__ # 查看list类的基类,结果为list类是继承自object类的
(<class 'object'>,)
>>> dict.__bases__ # 查看dict类的基类,结果为dict类是继承自object类的
(<class 'object'>,)
>>> set.__bases__ # 查看set类的基类,结果为set类是继承自object类的
(<class 'object'>,)

所以,object是最顶层基类

通过查看python源码,也可以验证这个结论

在前面,已经知道,python所有数据类型的类型都是由type类实例化得到的,那么type类又是由什么实例化而来,type类的基类又是什么呢

>>> type(type)					# 查看type的类型,结果也是type类
<class 'type'>
>>> type.__bases__ # 查看type的基类,结果为object
(<class 'object'>,)

通过查看源码,可以看到type类是继承自object的

由此可以知道,type是一个类,同时type也是一个对象

object类是所有类的基类,object类的基类又是什么呢??

>>> type(object) 			# 查看object的类型,结果为object类也是由type类实例化而来
<class 'type'>
>>> object.__bases__ # 查看object的基类,结果为object类的基类为空
()

综上所述,object与type和class的关系如下图所示

python3中的type与object的更多相关文章

  1. Python 中的type和object详解

    1.python中的类 Python2.x 中的类分为两种,一种是所有继承自object的新式类,另外一种是经典类classobj, 新式类的写法: class A(object): pass 经典类 ...

  2. python中的type和object详解

    关于这篇博客 这篇博客主要描述Python的新风格对象(new-style objects),如下: <type 'type'>和<type 'object'>分别是什么? 用 ...

  3. type和object详解

    python中的type和object详解   关于这篇博客 这篇博客主要描述Python的新风格对象(new-style objects),如下: <type 'type'>和<t ...

  4. Python中type与Object的区别

    Python中type与Object的区别 在查看了Python的API后,总算明白了.现在总结如下: 先来看object的说明: Python中关于object的说明很少,甚至只有一句话: clas ...

  5. Python中type和object

    type  所有类是type生成的 a = 1 b = "abc" print("type a:{}".format(type(a))) print(" ...

  6. Python面试题之Python中type和object的关系

    知乎上看到的提问: 两个是互为实例的关系,但不是互为子类的关系,只有type是object的子类,反之则不成立. 大牛说两者是蛋生鸡鸡生蛋的关系,但我还是不明白,有懂的麻烦解释一下, 希望不要给出外文 ...

  7. python 中type和object的关系

    转自:https://segmentfault.com/a/1190000008938763 学习python的同学都知道这么几句话 object类是所有新式类的父类. type是所有类的类. 那么t ...

  8. python3中返回字典的键

    我在看<父与子的编程之旅>的时候,有段代码是随机画100个矩形,矩形的大小,线条的粗细,颜色都是随机的,代码如下, import pygame,sys,random from pygame ...

  9. Python2和Python3中的字符串编码问题解决

    Python2和Python3在字符串编码上是有明显的区别. 在Python2中,字符串无法完全地支持国际字符集和Unicode编码.为了解决这种限制,Python2对Unicode数据使用了单独的字 ...

随机推荐

  1. Vue.js 2.x笔记:路由Vue Router(6)

    1. Vue Router简介与安装 1.1 Vue Router简介 Vue Router 是 Vue.js 官方的路由管理器.它和 Vue.js 的核心深度集成,构建单页面应用. Vue Rout ...

  2. Linux学习之路3-HelloWorld

    1.window系统上创建helloworld.c文件,并编写程序 #include <stdio.h> main(){ printf("Hello World!"); ...

  3. apache+php项目部署

    先安装apache和php然后进行如下操作(以63服务器的安装路径为例) 1.查看php项目运行的报错信息 路径:  cd  /var/log/httpd/error_log 如果错误如下: 可以尝试 ...

  4. ajax基本原理与案例

    一.什么是Ajax AJAX即“Asynchronous Javascript And XML”( 异步 JavaScript和XML),AJAX不是一种新的编程语言,而是一种用于创建更好更快以及交互 ...

  5. jmetter的http请求设置

    1.设置 cookie 2.设置header 3.login 4.post请求 5.get请求

  6. 百度地图--JS版

    百度地图JS版本 ----选择关键字地图展示对应地址---- CSS body, html { width: %; height: %; margin: ; font-family: "微软 ...

  7. 洛谷P2179 骑行川藏

    什么毒瘤... 解:n = 1的,发现就是一个二次函数,解出来一个v的取值范围,选最大的即可. n = 2的,猜测可以三分.于是先二分给第一段路多少能量,然后用上面的方法求第二段路的最短时间.注意剩余 ...

  8. 【洛谷P2756】飞行员配对方案问题

    题目大意:二分图匹配裸题. 题解:用网络流进行处理. 找配对方案的时候,采用遍历二分图左边的每个节点,找到不与源点相连,且正向边权值为 0,反向边权值为 1 的边,输出即可. 代码如下 #includ ...

  9. hdu 4542 "小明系列故事——未知剩余系" (反素数+DFS剪枝)

    传送门 参考资料: [1]:https://blog.csdn.net/acdreamers/article/details/25049767 题意: 输入两个数 type , k: ①type = ...

  10. golang-flag的问题

    如果选择-flag x 就是不支持布尔型