1、python中的类

 Python2.x 中的类分为两种,一种是所有继承自object的新式类,另外一种是经典类classobj,

  新式类的写法:

  class A(object):
    pass

  经典类的写法:

  class A():
    pass

  这两种类在除了在多继承的时候,继承查找顺序算法不一致外,并没有其他区别,这里就不再详细说明。当然在python3中已经不存在经典类。

2、类的继承关系  

  所有的新式类继承自object

  所有的经典类继承自 空

  每一个类(注意这里是类)都有一个__bases__属性,表示这个类的基类,我们可以用 CLASS.__base__查看一下常用的类:

print bool.__bases__
print int.__bases__
print float.__bases__
print set.__bases__
print list.__bases__
print dict.__bases__
print tuple.__bases__
print str.__bases__
print basestring.__bases__
print A.__bases__

  输出结果:

(<type 'int'>,)
(<type 'object'>,)
(<type 'object'>,)
(<type 'object'>,)
(<type 'object'>,)
(<type 'object'>,)
(<type 'object'>,)
(<type 'basestring'>,)
(<type 'object'>,)
(<type 'object'>,)

  可以看到,常用类都是继承自object的,也就是说我们常用的都是新式类。object的基类和经典类的基类又是什么?

class B():
  pass print B.__bases__
print object.__bases__

  输出结果:

()
()

  由此可见,新式类和经典类是类继承关系链中的顶层。

3、对象的__class__属性

  对于任何一个对象,都可以用__class__属性查看对象所属的类

print (33).__class__
print (33.3).__class__
print (True).__class__
print (['', '']).__class__
print ((['', ''])).__class__
print ({'a': 'b'}).__class__
print ((3,)).__class__
print ('str').__class__

  输出结果:

<type 'int'>
<type 'float'>
<type 'bool'>
<type 'list'>
<type 'list'>
<type 'dict'>
<type 'tuple'>
<type 'str'>

  小结:到此我们已经把类的继承关系弄清楚了。

   1、Python2.x 有两种类,经典类和新式类

   2、查看类的基类用__bases__

   3、查看对象的所属类用__class__

4、Python中的type

  在讲解type之前,先来看一组例子:

a = A()
print type(33)
print type(33.3)
print type(a) print type(int)
print type(float)
print type(A)
print type(object) print type(B)

  输出结果:

<type 'int'>
<type 'float'>
<class '__main__.A'>
<type 'type'>
<type 'type'>
<type 'type'>
<type 'type'>
<type 'classobj'>

  1、首先看前三个,对三个实例对象调用type()方法,输出结果为三个对象的类。

  2、接下来四个,对类型调用type()方法,输出结果均为<type ‘type’>

  3、最后一个经典类,输出是<type ‘classobj’>

  这里最好理解的方法就是,type()返回的是 对象或者类的创建者:

   1、 33的创建者是int,33.3的创建者是float,a的创建者是A。

   2、所有新式类的创建者为 type

   3、经典类的创建者为classobj

  在面向对象的说法中,我们最常听到就是一切皆对象。实例是对象,类其实也是对象,实例是由类创建的,那么类又是由谁创建的,Python类的type类作用就在于此,type类是Python里的元类,元类的功能就是创建新的类型。所有的新式类都由元类创建。

  特殊的经典类的创建者是classobj。它也是一种元类。

  type()函数就是拿到类或者对象的创建者。

提示:如果对元类不了解的可以查看Python相关元类的知识。

Python 中的type和object详解的更多相关文章

  1. python中的type和object详解

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

  2. type和object详解

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

  3. python中argparse模块用法实例详解

    python中argparse模块用法实例详解 这篇文章主要介绍了python中argparse模块用法,以实例形式较为详细的分析了argparse模块解析命令行参数的使用技巧,需要的朋友可以参考下 ...

  4. **Python中的深拷贝和浅拷贝详解

    Python中的深拷贝和浅拷贝详解   这篇文章主要介绍了Python中的深拷贝和浅拷贝详解,本文讲解了变量-对象-引用.可变对象-不可变对象.拷贝等内容.   要说清楚Python中的深浅拷贝,需要 ...

  5. python中requests库使用方法详解

    目录 python中requests库使用方法详解 官方文档 什么是Requests 安装Requests库 基本的GET请求 带参数的GET请求 解析json 添加headers 基本POST请求 ...

  6. python中的subprocess.Popen()使用详解---以及注意的问题(死锁)

    从python2.4版本开始,可以用subprocess这个模块来产生子进程,并连接到子进程的标准输入/输出/错误中去,还可以得到子进程的返回值. subprocess意在替代其他几个老的模块或者函数 ...

  7. 第7.15节 Python中classmethod定义的类方法详解

    第7.15节  Python中classmethod定义的类方法详解 类中的方法,除了实例方法外,还有两种方法,分别是类方法和静态方法.本节介绍类方法的定义和使用. 一.    类方法的定义 在类中定 ...

  8. Python中random模块生成随机数详解

    Python中random模块生成随机数详解 本文给大家汇总了一下在Python中random模块中最常用的生成随机数的方法,有需要的小伙伴可以参考下 Python中的random模块用于生成随机数. ...

  9. Python中的变量和作用域详解

    Python中的变量和作用域详解 python中的作用域分4种情况: L:local,局部作用域,即函数中定义的变量: E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部 ...

随机推荐

  1. MySQL单表查询实例

    数据表准备 ​```mysql create table emp( id int not null unique auto_increment, name varchar(20) not null, ...

  2. 8.7.ZooKeeper Watcher监听

    1.ZooKeeper Watcher ZooKeeper 提供了分布式数据发布/订阅功能,一个典型的发布/订阅模型系统定义了一种一对多的订阅关系,能让多个订阅者同时监听某一个主题对象, 当这个主题对 ...

  3. Cookie/Session的机制

    Cookie的机制 Cookie是浏览器(User Agent)访问一些网站后,这些网站存放在客户端的一组数据,用于使网站等跟踪用户,实现用户自定义功能. Cookie的Domain和Path属性标识 ...

  4. UVa540 Team Queue(队列queue)

    队列 STL队列定义在头文件<queue>中, 用“ queue<int>s ” 方式定义, 用push()和pop()进行元素的入队和出队操作, front()取队首元素(但 ...

  5. linux 远程配置docker加速器

    https://www.jianshu.com/p/dca49964af04 curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh ...

  6. JAVA WEB初接触——简单的MVC架构

    1.概述 之前有过开发web的经验,因此我不会向无头苍蝇一般,心里还是有点数的

  7. oracle—数据泵及常用参数

    -- 1.创建目录dumpcreate or replace directory dump as '/home/oracle/dump'; -- 2.授权:Grant read,write on di ...

  8. vue 中echart折线自适应

    前端时间做一个vue的项目,echart是按需引入的如下: // 引入 ECharts 主模块 import echarts from 'echarts/lib/echarts' // 引入折线图 i ...

  9. 浅析Service Worker

    一.service worker是什么? 平常浏览器窗口中跑的页面运行的是主JavaScript线程,DOM和window全局变量都是可以访问的. Service Worker是走的另外的线程,可以理 ...

  10. 决策树--CART树详解

    1.CART简介 CART是一棵二叉树,每一次分裂会产生两个子节点.CART树分为分类树和回归树. 分类树主要针对目标标量为分类变量,比如预测一个动物是否是哺乳动物. 回归树针对目标变量为连续值的情况 ...