博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python3 type和object的关系
阅读量:5364 次
发布时间:2019-06-15

本文共 2554 字,大约阅读时间需要 8 分钟。

参考:https://blog.csdn.net/andybegin/article/details/80775773

学习python的同学都知道这么几句话: 

1. object类是所有新式类的父类 
2. type是所有类的类

那么type和object是什么关系呢? 

object是一个新式类,我们可以通过object.class和object.bases来获取object所属的类和他的父类。

首先比较object和type:

print('object', object.__class__, object.__bases__)print('type', type.__class__, type.__bases__)输出:object 
()type
(
,)
  1. object和type都属于 type类 class ‘type’。
  2. object的父类为空,说明它没有继承任何类。
  3. type的父类为 object类 class ‘object’。

然后比较list, dict和tuple:

print('list', list.__class__, list.__bases__)print('dict', dict.__class__, dict.__bases__)print('tuple', tuple.__class__, tuple.__bases__)输出:list 
(
,)dict
(
,)tuple
(
,)
  1. list, dict和tuple都属于type类 class ‘type’
  2. 父类都是object类 class ‘object’

比较一个实例化的list:

a = [1, 2]print(a.__class__)print(a.__bases__)输出:
---------------------------------------------------------------------------AttributeError Traceback (most recent call last)
in
() 1 a = [1, 2] 2 print(a.__class__)----> 3 print(a.__bases__)AttributeError: 'list' object has no attribute '__bases__'

 

 

  1. 实例化的list它的类型是
class MyClass:    passprint('MyClass', MyClass.__class__, MyClass.__bases__)print('*'*50)print('MyClass Obj', MyClass().__class__)print('MyClass Obj', MyClass().__bases__)输出:MyClass 
(
,)**************************************************MyClass Obj
---------------------------------------------------------------------------AttributeError Traceback (most recent call last)
in
() 4 print('*'*50) 5 print('MyClass Obj', MyClass().__class__)----> 6 print('MyClass Obj', MyClass().__bases__)AttributeError: 'MyClass' object has no attribute '__bases__'

  

  1. 自定义类本身属于type类 class ‘type’ ,并且父类是object类 class ‘object’
  2. 自定义类的实例化的对象属于类本身,并且对象不存在父类属性

比较自定义元类:

class MyMetaClass(type):    passprint('MyMetaClass', MyMetaClass.__class__, MyMetaClass.__bases__)输出:MyMetaClass 
(
,)
  1. 元类本身属于type类 class ‘type’ ,并且父类也是type类 class ‘type’。

总结一下: 

type元类的类则是由type元类自身创建的。object类是由元类type创建的,但是type类又继承了object类。

图示:虚线表示源是目标的实例,实线表示源是目标的子类 

 

 参考:https://blog.csdn.net/piglite/article/details/78294112

参考2:https://blog.csdn.net/zhaohaibo_/article/details/80642631

转载于:https://www.cnblogs.com/qingsheng/p/9634331.html

你可能感兴趣的文章
animation属性
查看>>
页内的模块和组件抽象规划经验
查看>>
安全-分析深圳电信的新型HTTP劫持方式
查看>>
将Centos的yum源更换为国内的阿里云源
查看>>
git diff 的用法
查看>>
一段sql的优化
查看>>
十进制与十六进制的相互转换
查看>>
在Flex中用Validator检测数字、字符串、Email.
查看>>
[leetcode]4Sum
查看>>
POJ1062 昂贵的聘礼
查看>>
【零基础学习iOS开发】【02-C语言】08-基本运算
查看>>
Java 将指定字符串连接到此字符串的结尾 concat()
查看>>
Hibernate Criterion
查看>>
Python知识
查看>>
我们为什么要搞长沙.NET技术社区(三)
查看>>
杭电acm Cake
查看>>
js函数中this的指向
查看>>
c++ 引用方式传递数组
查看>>
HBase学习之路 (九)HBase phoenix的使用
查看>>
LeetCode() Remove Duplicates from Sorted Array II
查看>>