python3中的type与object
在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的关系如下图所示

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
javascript基础修炼(2)——What's this(上)
目录 一.this是什么 二.近距离看this 三. this的一般指向规则 四. 基本规则示例 五. 后记 开发者的javascript造诣取决于对【动态】和【异步】这两个词的理解水平。 一.this是什么 this是javascript关键字之一,是javascript能够实现面向对象编程的核心概念。用得好能让代码优雅高端,风骚飘逸,用不好也绝对是坑人坑己利器。我们常常会在一些资料中看到对this的描述是: this是一个特殊的与Execution Contexts相关的对象,用于指明当前代码执行时的Execution Contexts,this在语句执行进入一个Execution Contexts时被赋值,且在代码执行过程中不可再改变。 注:Execution Contexts也就是我们常听到的"上下文"或"执行环境"。 看不懂?看不懂就对了,我也看不懂。 对于this的指向,我们常会听到这样一个原则——this是一个指针,指向当前调用它的对象。但实际使用中,我们却发现有时候很难知道当前调用它的是哪个对象,从而引发了一系列的误用和奇怪现象。 今天,我们就换一种思路,试试如何从语言...
- 下一篇
Python全栈 MySQL 数据库 (SQL查询、备份、恢复、授权)
ParisGabriel 每天坚持手写一天一篇 决定坚持几年 为了梦想为了信仰 开局一张图 今天接着昨天的说 索引有4种: 普通 索引 : index 唯一索引: unique 主键索引: primary key 外键索引: foreign key 索引查询命令: show index from 表名\G; Non_Unique:1 :index Non_Unique:0 :unique 外键索引(foreign key): 定义:让当前字段的值 在另一个表的范围 内选择 语法: foreign key(参考字段名) references 主表(被参考字段名) on delete 级联动作 on update 级联动作 使用规则: 主表、 从表字段 数据类型要一致 主表 被参考字段一般是: 主键 删除外键: alter table 表名 drop foreign key 外键名; 外键名查询:show create table 表名; 级联动作: casc...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装Docker,最新的服务器搭配容器使用
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7设置SWAP分区,小内存服务器的救世主