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

先来看几个例子:

>>> 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对象

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> 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详解

    参考链接: Python object() 这篇主要描述Python的新风格对象(new-style objects),如下: 和分别是什么? 用户自定义的类和实例之间是怎么联系的?它们和内置类型又是 ...

  2. python object的实例是什么_python中的type和object详解

    这篇博客主要描述Python的新风格对象(new-style objects),如下: 和分别是什么? 用户自定义的类和实例之间是怎么联系的?它们和内置类型又是怎么联系的? 什么是元类(metacla ...

  3. Python3中map函数返回值的问题

    在Python2中map函数会返回一个list列表,但在Python3中,返回<map object at 0x********> >>> def f(x,y): ... ...

  4. python 中type和object的关系

    学习python的同学都知道这么几句话 object类是所有新式类的父类. type是所有类的类. 那么type和object是什么关系呢? object是一个新式类,我们可以通过object.__c ...

  5. 成功解决Python中出现的TypeError: object of type 'zip' has no len()

    成功解决Python中出现的TypeError: object of type 'zip' has no len() 不罗嗦,直接解决问题! 目录 解决问题 解决思路 解决方法 解决问题 TypeEr ...

  6. Python中type和object的关系

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

  7. python中object是什么类型_Python 的 type 和 object 之间是怎么一种关系?

    class,metaclass,instance,subclass,base 以下成立: 对任意的A,A是instance(推论:任意class也是instance) 对任意A,存在B,使得B是A的c ...

  8. python3中调用map函数报错map object at 0x000001EF004D97B8

    python3中调用map函数报错<map object at 0x000001EF004D97B8> 在python中这样的一段代码报错: a=map(int,input().split ...

  9. python3中解决调用map()函数出现map object at 0x01690DF0问题

    python3中运行以下程序,报错<map object at 0x01690DF0> list_1=[1,2,3,4,5,6] def double_func(x):return(x*2 ...

最新文章

  1. vim 成“神“之路 (一)
  2. linux 命令安装redis
  3. no awt in java.libary.path
  4. 面试官:什么是HTTP连接池?你怎么回答?Feign性能调优之HTTP连接池
  5. JavaScript中的元素获取与操作
  6. Bootstrap HTML编码规范之属性顺序
  7. 打开Jupyter Notebook 时报错:EnvironmentLocationNotFound: Not a conda environment:
  8. Hadoop入门进阶步步高(六-Hadoop1.x与Hadoop2的区别
  9. 云原生数据中台的 What、Why、Who、How和Where
  10. 华为智慧屏云会议怎么操作_会议室预定系统有哪些?怎么操作
  11. html文件 保持在,如何保持.phtml文件的简洁和整洁?
  12. Z逆变换(2020.10.21)
  13. English语法_形容词-排序
  14. 【无标题】炒外汇是什么,为什么有人说炒外汇能发财
  15. NTKO OFFICE文档控件使用
  16. FPGA niosII 视频笔记
  17. 2010年Web网页设计趋势
  18. 已被Windows defender smartscreen阻止
  19. Android user版通过adb_enable开启adb 调试 不提示对话框
  20. SQL学习之check约束

热门文章

  1. 【云上ELK系列】Logstash迁移Elasticsearch数据方法解读
  2. MFC获得主窗体和父窗体指针
  3. ionic + cordova 配置和开发过程中的一些问题
  4. Objective-c(1)
  5. boost log 能不能循环覆盖_如何在 JS 循环中正确使用 async 与 await
  6. 【ABAP】带PDF附件的邮件发送功能
  7. 【MM 模块】 Optimized Purchasing 优化采购 3
  8. CONVT_NO_NUMBER
  9. SAP财务报表不平之分析
  10. 斯坦科维奇洲际篮球冠军杯