码迷,mamicode.com
首页 > 其他好文 > 详细

type和object

时间:2018-12-24 13:51:10      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:存在   type   总结   one   定义类   分享   属性   erro   数据   

一.定义

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

二.解析

 
下面通过代码来比较一下object和type的关系(__class__获取所属的类,__bases__获取父类)
print(‘type‘, type.__class__, type.__bases__)
输出:
object <class ‘type‘> ()
type <class ‘type‘> (<class ‘object‘>,)

可以得出以下结论:
1.type和object都属于type类 class ‘type’
2.object类的父类为空
3.type的父类为object类 class ‘object’ 
 
 
在看一下python的基本数据类型list、dict和tuple的情况
print(‘list‘, list.__class__, list.__bases__)
print(‘dict‘, dict.__class__, dict.__bases__)
print(‘tuple‘, tuple.__class__, tuple.__bases__)
输出:
list <class ‘type‘> (<class ‘object‘>,)
dict <class ‘type‘> (<class ‘object‘>,)
tuple <class ‘type‘> (<class ‘object‘>,)

可以得出以下结论:
1.它们都属于type类 class ‘type’
2.父类都是object类 class ‘object’ 
 
比较一个实例化的list:
li = [1, 2]
print(li.__class__)  # <class ‘list‘>
print(li.__bases__)  # AttributeError: ‘list‘ object has no attribute ‘__bases__‘

 

在实例化一个自定义类

class MyClass:
   pass
print(‘MyClass‘, MyClass.__class__, MyClass.__bases__)
print(‘*‘*50)
print(‘MyClass Obj‘, MyClass().__class__)
print(‘MyClass Obj‘, MyClass().__bases__)
输出:
MyClass <class ‘type‘> (<class ‘object‘>,)
**************************************************
MyClass Obj <class ‘__main__.MyClass‘>

可以得出:

  1. 自定义类本身属于type类 class ‘type’ ,并且父类是object类 class ‘object’

  2. 自定义类的实例化的对象属于类本身,并且对象不存在父类属性

比较自定义元类:

class MyMetaClass(type):
    pass
print(‘MyMetaClass‘, MyMetaClass.__class__, MyMetaClass.__bases__)
 
输出:
MyMetaClass <class ‘type‘> (<class ‘type‘>,)

 

三.总结 

type元类的类则是由type元类自身创建的。object类是由元类type创建的,但是type类又继承了object类。
 
图示:虚线表示源是目标的实例,实线表示源是目标的子类 
技术分享图片
 

type和object

标签:存在   type   总结   one   定义类   分享   属性   erro   数据   

原文地址:https://www.cnblogs.com/lshedward/p/10168115.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!